죄송합니다. 이전에 분명히 답변되었습니다. 나는 특히 여기이 스레드에 대해 알고 :node.js 서버 응답의 비동기 함수 호출의 결과
How do I return the response from an asynchronous call?
하지만 솔직히 말해서, 난 아직 잃었어요. 필자는 단순히 함수를 비동기 적으로 호출하고 클라이언트에 대한 응답에서이 함수를 반환하는 방법을 이해하지 못합니다.
웹 페이지에 콘텐츠를 제공하는 다소 간단한 경로 (routes.js)가 있습니다. 사이트의 특정 요소는 rfid 태그의 목록입니다. 이 목록은 함수에서 채워지며, 물론 비동기라고 부르고 싶습니다.
내가 렌더링 엔진을 템플릿으로 (이전 옥라고도 함) 흙을 사용하고 있는데 내 tags.pug은 다음과 같습니다
extends index.pug
block content
h2!= subheadline
p!= messagetext
p!= bodyContent
마지막 페이지 참조 = BodyContent를을!? 이 요소는 태그 목록입니다. 당신이 볼 수 있듯이, 난,
// get the listing of all stored rfid tags
app.get("/tags", function(req, res) {
res.render('tags', {
title: 'RFID Tag Startseite',
headline: 'RFID Tag Startseite',
subheadline: 'Verfügbare Tags',
messagetext: 'Bitte ein RFID Tag auswählen, um mehr Daten angezeigt zu bekommen',
bodyContent: tagController.getTagList(app, function(tagController))
});
})
자 : 아래
이 사이트가 반환되어야하는 app.get ('/ 태그') 내 routes.js에서 코드입니다 다른 모듈 (tagController)의 bodyContent 위치에서 함수 (getTagList)를 호출하려고 시도하면 태그 목록이 제공됩니다.내 getTagList() 함수의 코드를 볼 수 있습니다 다음은
var getTagList = function(app, result){
// get global app variables
var DEBUG = app.get('DEBUG');
var svrAddr = app.get('svrAddr');
var rfidTagDir = app.get('rfidTagDir');
var responseContent = '';
fs.readdir(rfidTagDir, function(err, items) {
responseContent = "{\'response\': \'info\', \'message\': \'list of all stored rfid tags\', \'tags\': ["
for (i in items) {
var tag = items[i].toString().substring(0,items[i].indexOf('.'));
responseContent += "{\'tag\': \'" + tag + "\', \'endpoint\': \'"+svrAddr+"/tags/tag/" + tag + "\', \'file\': \'"+items[i]+"\'}"
if (i<items.length-1) responseContent += ",";
}
responseContent += "]}"
if (DEBUG) console.log(responseContent);
result = responseContent;
return result;
)};
내 문제는 그것이 작동하지 않습니다이다. 위의 코드는 오류를 제공합니다 :
SyntaxError: Unexpected token)
마지막 두 경우). res.send 이전에 변수 (tagContent 또는 기타)를 채우고 해당 변수를 응답에 포함 시키려고하면 함수 호출의 결과가 표시되지 않습니다. 그러나 console.log에서 실행중인 함수와 생성 된 태그 목록을 볼 수 있습니다.
제발 누군가 제발 제발 제발, 내 routes.js 내에서 모듈 tagController에서 내 함수 getTagList를 호출하는 방법을 말해 줄 수 있도록 콘텐츠가 표시됩니다 ???
비동기 호출에 대해 알아야 할 사항 중 하나는 결코 '반환'입니다. 호출자가 지정한'콜백 함수 '를 호출합니다. 아래 답변은 그 실례입니다. – Shaharyar