node.js - 嵌套请求,等待请求函数完成

时间:2017-02-11 13:15:02

标签: javascript node.js

我使用以下代码

request(firstparams, function () {
    var secondparams = {
    // ******
    };

    request(secondparams, function () {
        for (i=0; i<3; i++) {
            var thirdparams = {
            // ******
            };

            request(thirdparams, function () {
                console.log('foo');
            });
        }
        console.log('bar');
    });
}); 

并希望得到如下结果:

foo
foo
foo
bar

但结果是:

bar
foo
foo
foo

抱歉我的英语不好,如果有些含糊不清,我会尽力解释。非常感谢^ ^

1 个答案:

答案 0 :(得分:0)

执行所需操作的简单方法是使用'async' module这是处理异步问题的经典模块。

并行运行第3个电话并记录&#39; bar&#39;在每个完成后你会做这样的事情:

&#13;
&#13;
const async = require('async');

let asyncFunctions = [];
for (let i = 0; i < 3; i+= 1) {
	let thirdParams = {...};

	asyncFunctions.push(function (callback) {
		request(thirdparams, function (err, data) {
			console.log('foo');
			callback(err, data);
		});
	});
}

async.parallel(asyncFunctions, function (err, data) {
	console.log('bar');
});
&#13;
&#13;
&#13;

您正在使用回调。但是还有其他方法可以处理node.js中的异步,例如:承诺,生成器和ES7中的async / await函数。

我认为这可能会对您查看this one等文章有用。