我開始使用腳本(而不是webapp),並且這對我來說是莫名其妙的。我有以下簡單功能:NodeJS:前一個函數返回前的函數返回
var request = require('request');
function first_func(name) {
console.log('first_func(' + name + ')');
var url = 'http://...' + name;
var answers = new Array();
request(url, function(error, resp, html) {
...
answers.push(x);
});
return answers;
}
function second_func(answers) {
var results = new Array();
for (var a in answers) {
var url = 'http://...' + a;
request(url, function(error, resp, html) {
...
results.push(x);
});
}
return results;
}
first_func()
廢料的目錄頁,second_func()
廢料該條特定頁面。運行該腳本這樣在腳本的末尾:
var names = ['a', 'b', ...];
function main() {
for (var n in names) {
var ans = first_func(names[n]);
console.log('answers: ' + ans);
for (var a in ans) {
second_func(ans[a]);
}
}
}
main();
出於某種原因在的NodeJS並行做first_func()
和second_func()
。爲什麼在運行second_func()
之前不等待first_func()
完成?輸出是:
答案:未定義
first_func(一)
first_func(B)
...
爲什麼跳的NodeJS成內for
在main()
之前循環等待first_func()
返回?
歡迎來到令人興奮的異步編程世界! 'request'是一個異步方法,所以'first_func'和'second_func'在調用'request'回調函數之前返回。 – JohnnyHK
這個相關的問題應該有助於澄清發生了什麼事情:http://stackoverflow.com/questions/23667086/why-is-my-variable-unaltered-after-i-modify-it-inside-of-a-function-asynchron – JohnnyHK