gpt4 book ai didi

javascript - 如何在返回数据之前等待所有 promise 被解决?

转载 作者:行者123 更新时间:2023-11-30 16:52:47 25 4
gpt4 key购买 nike

有 3 个功能,第一个是我的 promise 。

    fnGetIps : function () {
return new Promise(function(resolve, reject) {
var err = [], path = getBaseUrl();
restGet(path + NAMES, function (res, edges) {
if (res === undefined) {
reject("Unable to get data");
} else {
resolve(edges);
}
});
});
},

第二个是我使用 promise 的地方。

fnGetData: function(obj){
var promise_holder;
for (property in obj) {
if (obj.hasOwnProperty(property)) {
if(condition){
promise_holder = fngetip();
}
if(condition2){
//some other code
}
}
}
promise_holder.then(function (ifChildren) {
obj.children = ifChildren;
}, function (err) {
console.error(err);
});
}

最后是我调用 fnGetData 的函数

 TopoTree : function(children) {
var treeArray;
for (i = 0; i < children[i]; i++) {
fnGetData(children[i]);
}

treeArray.push(treeData);
return treeArray;
},

我不想在 fnGetData 的所有 promise 都已解决之前返回 TreeArray

如何等待所有的promise先被resolved再返回数据?

我不能使用 promise.All,因为我在 topotree 范围内没有 promise_holder 还是我想错方向了?

最佳答案

你想要Promise.all() .

fnGetData 返回 promise_holder 并让 TopoTree 将它们收集到一个数组中并将完成逻辑放在Promise.all()

之后的 then 函数
fnGetData: function(obj){
var promise_holder;
for (property in obj) {
if (obj.hasOwnProperty(property)) {
if(condition){
promise_holder = fngetip();
}
if(condition2){
//some other code
}
}
}

// RETURN THE PROMISE HERE!
return promise_holder.then(function (ifChildren) {
obj.children = ifChildren;
// Return a value for use later:
return ifChildren;
});
}

TopoTree : function(children) {
var promises = [];
for (i = 0; i < children.length; i++) {
promises.push(fnGetData(children[i]));
}

// We are handling the result / rejections here so no need to return the
// promise.
Promise.all(promises)
.then(function(treeArray) {
// Do something with treeArray
})
.catch(function(error) {
console.log(error);
});
},

关于javascript - 如何在返回数据之前等待所有 promise 被解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30241881/

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