gpt4 book ai didi

javascript - Promise.all 替换?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:08:00 27 4
gpt4 key购买 nike

有什么方法可以让我在 Javascript 中调用多个异步函数,但在调用完成后立即获得响应,这与 Promise.all 等待所有异步调用完成不同?我想要的是,并行运行异步调用,并在其他调用仍在运行时立即获得相应调用的响应,然后更新 react 状态。

我已经在使用 Promise.all 进行多个异步调用,但它会在所有调用完成时给出响应。

最佳答案

您可以迭代一系列 promise 并更改每个 promise 决议的状态:

let state = null;

const p1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve({p1: 1});
}, 2000);
});
const p2 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve({p2: 2});
}, 1000);
});
const p3 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve({p3: 3});
}, 3000);
});

// Iterate promises
[p1, p2, p3].forEach(p => {
p.then(res => {
state = Object.assign({}, state, res);
console.log(state);
});
});

console.log(state);

您可以为此任务创建自己的 Promise 方法:

if (!Promise.each) {
Promise.each = function(promises, callback, error) {
if (promises && Array.isArray(promises)) {
promises.forEach(p => {
p.then(res => {
callback(res);
}, err => {
if (error) {
error(err);
} else {
console.log(err);
}
});
});
}
}
}

// Usage
Promise.each([p1, p2, p3], updateState);

关于javascript - Promise.all 替换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58316094/

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