【发布时间】:2017-06-14 01:03:35
【问题描述】:
我希望创建一个函数数组来动态调用,稍后将在 Q.all([]) 承诺调用中使用。
例如;
//data is previously generated
var promiseArray = [];
for (var i = 0; i < data.length; i++){
promiseArray.push(functionCall(data[i]))
}
Q.all(promiseArray).then(function(){
//Do something
})
在 Q.all 语句之前,如何在不调用函数的情况下推送到数组?我不想在 for 循环中调用它,因为它不会捕获任何错误并且我无法进一步处理响应。
编辑:
所以为了澄清我的问题(因为我认为我没有像我应该说的那样清楚),这里是静态数据长度为 3 的解决方案;
//data is previously generated
var data = [12432432,4324322392,433324323];
//Each function call can happen in parallel or series as its an external POST to an API
//I'm not bothered about speed for this application (as its low throughput) and can wait a few seconds for each
// response
//FunctionCall returns a promise
functionCall(data[0]).then(function(){
//Log success / failure to mongo
});
functionCall(data[1]).then(function(){
//Log success / failure to mongo
});
functionCall(data[2]).then(function(){
//Log success / failure to mongo
});
//OR
functionCall(data[0]).then(function(){
//Log success/failure to mongo
functionCall(data[1]).then(function(){
//Log success/failure to mongo
functionCall(data[2]).then(function(){
//Log success/failure to mongo
});
});
});
但是直到运行时我才知道数据的长度
【问题讨论】:
-
呃,
Q.all确实接受了一组承诺,而不是函数,所以你需要调用它们吗? -
基本上我希望能够创建一个函数数组以使用 Q.all([]) 调用,而无需在将它们添加到数组时调用它们。否则我会在添加它们时调用它们并在 Q.all([]) 中调用它们
-
是的,您确实想立即给他们打电话。
Q.all不会打电话给他们。我不明白为什么你的第一个 sn-p 不起作用。您的论点“我不想在 for 循环中调用它,因为它不会捕获任何错误并且我无法进一步处理响应。”有缺陷,您可以轻松捕获错误并处理结果通过链接then. -
@aaaidan 我已经更新了我的答案,请检查
标签: arrays node.js dynamic promise q