我有以下情况。我需要进行3次http调用,返回所有3个请求的结果。问题是我还没有找到一种方法来同步完成这项工作。在NodeJS中解决这个问题的最佳方法是什么?
答案 0 :(得分:1)
javascript es5 +的内置标准是使用promises,并保证所有人在完成时等待。
let req1 = new Promise(function (resolve, reject) {
///http request that resolves/rejects
});
let req2 = new Promise(function (resolve, reject) {
///http request that resolves/rejects
});
let req3 = new Promise(function (resolve, reject) {
///http request that resolves/rejects
});
Promise.all([req1, req2, req3]).then(function (values) {
console.log(values);
});
等等。
答案 1 :(得分:0)
这里有无数的模块。我个人经常使用async
,为此您可以使用async.eachSeries()
。
答案 2 :(得分:0)
最好的方法是“宣传”您的请求。有多种方式,但我最喜欢的库(我认为是最完整的库之一)是Bluebirdjs。使用蓝鸟,您可以宣传完整的图书馆,当然还有您自己的要求。
Promise.promisify(
function(any arguments..., function callback) nodeFunction,
[Object {
multiArgs: boolean=false,
context: any=this
} options]
) -> function
例如:
var getAsync = Promise.promisify(redisClient.get);
getAsync.call(redisClient, 'foo').then(function() {
//...
});
点击此处查看一些示例:http://bluebirdjs.com/docs/working-with-callbacks.html#more-common-examples