gpt4 book ai didi

javascript - 使用 Q.all 的传播时出错

转载 作者:行者123 更新时间:2023-12-03 11:41:02 25 4
gpt4 key购买 nike

我使用Q.allspread 结合使用为了迁移两个 promise.then成功解决 promise 时同时执行:

  var p1=112;
var p2=function(data){
console.log(data);
return getFormDataWithDropdown(objtype,scenario);
};
var guidRequest=processGuidRequest();
if(!Q.isPromise(guidRequest))
{
guidRequest=Q(guidRequest);
}
guidRequest.all([p1,p2])
.spread(function(geoVal,formVal){
console.log(geoVal);
console.log(formVal);
}).done();

p1valuep2是一个返回 function 的函数称为 getFormDataWithDropdown ,它返回 promisevalue基于 promise 的一组链式分辨率s.但是,当我运行此代码时,我收到此错误:

  Uncaught TypeError: Function.prototype.apply: Arguments list has wrong type 

该函数发生错误:

  Promise.prototype.spread = function (fulfilled, rejected) {
return this.all().then(function (array) {
return fulfilled.apply(void 0, array);//error occurs here
}, rejected);

};

最佳答案

您的代码中存在一些严重错误(Q 中存在一些错误,因为 .all 显然实现了返回非数组)。

all 接受回调。它唯一的参数要么是一个数组,要么是一个数组的 promise 。它可以作为静态方法调用:

Q.all([…])

或者作为 Promise 的方法(数组的 Promise):

Q([…]) .all()

现在,这个数组(无论它来自哪里)需要包含 promise - 届时将等待的所有 promise 。然而,您正在传递一个数字和一个函数。您应该使用 Q(p1) 将普通值包装在 Promise 中(即使不是严格必要的),并且需要调用您的函数,以便它为您提供 Promise(如果它确实是一个函数)正如你所说的一个函数,你需要调用它两次)。

如果您想等待 guidRequest,您将需要一个回调函数 - 无论您愿意与否。

另请注意,guidRequest 上的 Q.isPromise 是不必要的,只需尝试使用 Q 进行转换即可。

var v1=112;
function f2(data){
console.log(data);
return getFormDataWithDropdown(objtype,scenario);
};

var guidRequest = Q(processGuidRequest());
guidRequest.then(function(guid) {
var p1 = Q(v1),
p2 = f2(guid); // promises here!
return Q.all([p1, p2]);
}).spread(function(geoVal,formVal){
console.log(geoVal);
console.log(formVal);
}).done();

或者,您可以只编写return [p1, p2]spread会自动等待它们。

关于javascript - 使用 Q.all 的传播时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26273938/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com