我有一个需要一些外部数据的承诺回电。我怎样才能做到这一点?此代码中的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期间获得它?
答案 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
。