无论何时解决承诺,如何附加到状态



我正在寻找一个wheel类型的promise助手。让我们取Promise.All函数。我有4个承诺。二是瞬间速度。一个很快。一个是慢。这个缓慢的承诺需要3秒钟才能解决。

const promise1 = Promise.resolve(3);
const promise2 = new Promise((resolve, reject) => {
setTimeout(resolve, 3000, 'slow');
});
const promise3 = new Promise((resolve, reject) => {
setTimeout(resolve, 100, 'foo');
});
Promise.all([promise1, promise2, promise3]).then((values) => {
console.log(values);
// here I want to setState()
// this.setState({values})
});
// output: Array [3, "slow", "foo"]

当我运行代码时,all将等待所有承诺(所以是3秒(,然后显示数组。这遵循文档:

Promise.all((方法将可迭代的Promise作为输入,并返回一个Promise,该Promise解析为输入Promise的结果数组此返回的promise将在所有输入的promise都已解析时解析,或者如果输入可迭代项不包含promise。一旦任何输入promise拒绝或非promise抛出错误,它就会立即拒绝,并将使用第一条拒绝消息/错误进行拒绝。

强调是我的

现在,我要寻找的是一个方法,它将返回一个promise,然后在某个输入的promise已解析时进行解析。

类似于:

Promise.whenever([promise1, promise2, promise3]).then((value) => {
console.log(value);
// here I want to setState()
// this.setState({values: this.state.values.concat([value])})
});

谁将打印

3
foo
slow

承诺所有

setState

我没有找到任何原生的whenever,但基本上可以用forEach和高阶函数来构建它。

const promise1 = Promise.resolve(3);
const promise2 = new Promise((resolve, reject) => {
setTimeout(resolve, 3000, 'slow');
});
const promise3 = new Promise((resolve, reject) => {
setTimeout(resolve, 100, 'foo');
});
const PromiseWhenever = (promises, action, rejectionAction) => {
promises.forEach(promise => {
promise.then(action).catch(rejectionAction);
});
}
PromiseWhenever([promise1, promise2, promise3], value => console.log(value), () => console.error("failed"))

现在,如果您想要Promise.Whenever,则必须编辑Promise的原型。这值得吗?

对于setState,它将如您所期望的那样工作:

PromiseWhenever([promise1, promise2, promise3], value =>
this.setState({ values: this.state.values.concat([value]) }, () => console.error("failed"))

与如何在多个承诺解决时解决这些承诺相关?并在promise内部设置State。all((react

最新更新