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

时间:2017-05-21 23:24:54

标签: javascript node.js angular typescript 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函数的范围内。如何在promise.then期间获得它?

2 个答案:

答案 0 :(得分:1)

如果您已在调用then的范围内提供了数据,那么您无需执行任何特殊操作即可在then内访问该数据。它将通过封闭的魔力提供。

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

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

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
});

在单独的说明中,并没有特别关于promises,如果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
});

答案 1 :(得分:0)

  

此代码中的myDataINeed始终为null;

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

更多

myDataINeed需要来自某个外部来源,即不是来自Promise.all