【发布时间】:2016-12-05 01:44:26
【问题描述】:
我是 Node 新手,我正在尝试在 API 调用的 for 循环中附加数据,但我遇到了 Node 的异步特性的挑战。
function emotionsAPI(data, next){
for(var url in data) {
if(data.hasOwnProperty(url)) {
request({
method: 'POST',
url: 'https://api.projectoxford.ai/emotion/v1.0/recognize',
headers: {
"Content-Type": 'application/json',
"Ocp-Apim-Subscription-Key": keys.emotion_key
},
body: "{\"url\" : \"" + url + "\"}"
}, function (error, response, body){
var emotions = JSON.parse(body)
if (emotions.length > 0){
var scores = emotions[0].scores;
console.log("scores found");
console.log(scores.anger);
data[url].anger = scores.anger;
}
})
}
}
next(data);
}
function faceAPI(data){
console.log("HELP");
console.log(data);
}
emotionsAPI(data, faceAPI);
faceAPI 函数中的 console.log 正确打印到控制台,但没有反映 for 循环应该进行的更改。我尝试使用 async.forEachOf 但控制台似乎永远挂起。
【问题讨论】:
-
您正在尝试以异步方法更改数据。他们以不同的方式。也许你应该把“next(data)”方法放在url请求的回调方法中。
标签: javascript node.js asynchronous