我有一个需要一些外部数据的 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
。