我可以在我的承诺回调中添加参数吗?



我有一个需要一些外部数据的 promise 回调。 我该怎么做? 此代码中的 myDataINeed 始终为 null。

var myDataVariable = "some dynamic data set above"; 
var promActions = [];
 for(var k in loop){
   promActions.push(externalCall(loop[k]));
 }
 var promResults = Promise.all(promActions);
 let myDataINeed = myDataVariable;
 promResults.then(function(responseArray, myDataINeed){
    ....do stuff with responseArray and myDataINeed
 });

编辑:我向 myDataVariable 添加了一个值,以便您可以看到它已设置为某些内容。 myDataINeed 不在 .then 函数内的范围内。 那么,在承诺期间我该如何实现它呢?

如果您在调用 then 的作用域中已经有可用的数据,那么您不需要做任何特殊的事情就可以在then内访问它。它将通过关闭的魔力提供。

在您的问题尝试中,您实际上是通过在then回调中将其声明为参数来隐藏myDataINeed变量,因此该值将始终未定义。

要使其工作,您需要做的就是删除该参数:

var myDataVariable = "some dynamic data set above"; 
var promActions = [];
for(var k in loop){
   promActions.push(externalCall(loop[k]));
}
var promResults = Promise.all(promActions);
let myDataINeed = myDataVariable;
promResults.then(function(responseArray){  // <-- remove the myDataINeed parameter
    ....do stuff with responseArray and myDataINeed
});

另外,如果loop是一个数组(我认为它是数组(,那么使用该循环存在问题。不应将for .. in与数组一起使用。如果它确实是一个数组,您可以使用 .map 更可靠更简洁地完成您尝试执行的操作:

var myDataVariable = "some dynamic data set above"; 
var promActions = loop.map(externalCall);
var promResults = Promise.all(promActions);
let myDataINeed = myDataVariable;
promResults.then(function(responseArray){  // <-- remove the myDataINeed parameter
    ....do stuff with responseArray and myDataINeed
});

此代码中的 myDataINeed 始终为空;

承诺all解析为单个数组值。所以promResults.then(function(responseArray, myDataINeed){错了。 promResults.then(function(responseArray){是对的。

更多

myDataINeed需要来自一些外部来源,即不是来自Promise.all

最新更新