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

Javascript 我可以在承诺回调中添加参数吗?,javascript,node.js,angular,typescript,promise,Javascript,Node.js,Angular,Typescript,Promise,我有一个承诺回电需要一些外部数据。我该怎么做?此代码中的MyDatained始终为空 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 =

我有一个承诺回电需要一些外部数据。我该怎么做?此代码中的MyDatained始终为空

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添加了一个值,这样您就可以看到它被设置为某个值。MyDatained不在.then函数的作用域中。在承诺的过程中我该怎么做呢

此代码中的MyDatained始终为空

承诺全部解析为单个数组值。所以promResults.thenfunctionresponseArray,MyDatained{是错误的。promResults.thenfunctionresponseArray{是正确的

更多
MyDatained将需要来自一些外部来源,即不是来自Promise.all。

如果您当时调用的范围中已经有可用的数据,那么您不需要在then中执行任何特殊操作来访问它。它将通过闭包的魔力来提供

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

要使其工作,只需删除该参数:

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

。然后回调只接收一个参数,您不能只添加一个参数,并期望承诺知道您需要什么-此外,您所显示的代码,MyDatained在其中是可访问的。然后,因为它仍然在范围内,只要您没有像在代码中那样用参数屏蔽它,即从.then回调中删除该参数,和presto chango,MyDatained将是您需要的数据:p.s.在此代码中,MyDatained将是未定义的,在.then回调中不为nullanyway@guest271314-我不知道你的评论对我意味着什么,但是所有的。然后处理程序只得到一个参数。如果你把这一个参数作为一个对象,你可以在它上放置任意多的属性t、 但是您只能得到一个参数。这就是promise spec的定义方式。对于.then处理程序函数,您不能有两个或多个参数。@guest271314-谁知道呢?这是一个不好的、不清楚的问题。正如所声明的,变量在范围内并且可用。@guest271314 MyDatained似乎是一个异步函数调用,而不像ca函数我会的
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
});