我正在寻找一个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