저는 nodejs를 처음 사용하여 비동기 동작에 어려움을 겪고 있습니다. 내가하고 싶은 것은 REST API를 작성하는 것입니다.이 API는 다른 API를 사용하며 이러한 결과에 종속됩니다. 내가 시도한 것은 API 호출자에게 보내기 전에 호출을 함수 [1]에 캡슐화하고 데이터를 수집하여 [2] 처리합니다. 문제는 [2] 데이터를 수집 할 때 값으로 끝나는 callApiX
함수 [1]이 여전히 실행 중이라는 것입니다. 또한 함수의 일부를 두 번 이상 호출하고 값을 비교해야합니다.비동기 작업으로 인해 일관성없는 결과가 발생합니다.
[1] API를 호출하는 기능 :
function callApi1() {
var result =
{
"code": "",
"name": "",
"lat": 0,
"lng": 0
};
var request = require("request");
var url = "someurl";
request({
url: url,
json: true
}, function (error, response, body) {
if (!error && response.statusCode === 200) {
// fill result
result.code = body.code; // etc.
// the correct result is being displayed
console.log(result);
return result;
}
})
}
function callApi2() // ...
[2] 기능에서 데이터를 얻을 나는 아마도이 문제를 해결할 수있는 방법
var express = require('express');
var router = express.Router();
app.route('/api')
.get(function(req, res) {
// array for results
var results = [];
// all this data is going to be undefined, since the callApiX functions [1] are still running
results += callApi1();
results += callApi2();
results += callApi3();
// do something with the data collected in results before being sent back to the caller of my API
res.json(results); // output: {undefinedundefinedundefined}
});
를 요청하는 추가?
환상적인 ** async ** 세계에 오신 것을 환영합니다! 너는 그렇게 할 수 없다. 대신, 약속을 사용하십시오. – SLaks
어떤 구현을 사용 하시겠습니까? – Ronin
나는 [Q] (https://github.com/kriskowal/q)를 좋아한다. – SLaks