【发布时间】:2019-11-28 00:09:30
【问题描述】:
根据当前的行为,Promise.all() 方法返回一个单一的 Promise,当所有作为可迭代传递的承诺都已解析或可迭代不包含任何承诺时,该 Promise 将解析。它以第一个拒绝的承诺的原因拒绝。
例如:
var promise1 = Promise.resolve(3);
var promise2 = 42;
var promise3 = new Promise(function(resolve, reject) {
setTimeout(resolve, 100, 'foo');
});
Promise.all([promise1, promise2, promise3]).then(function(values) {
console.log(values);
});
// expected output: Array [3, 42, "foo"]
目前,我正在尝试实现类似于promise.all(例如promise.sequenceAll)的polyfill,其中第一个承诺的结果将被提供给下一个承诺。
var promise1 = Promise.resolve(3);
var promise2 = 42;
var promise3 = new Promise(function(resolve, reject) {
setTimeout(resolve, 100, 'foo');
});
Promise.sequenceAll([promise1, promise2, promise3]).then(function(values) {
console.log(values);
});
预期输出:promise1 的结果将作为参数传递给 promise2。如果任何一个 Promise 被拒绝,那么它将执行 promise.catch();
【问题讨论】:
-
听起来你需要像 RamdaJS (ramdajs.com) 这样的东西。 “[Ramda] 使得将函数构建为更简单函数的序列变得非常容易,每个函数都转换数据并将其传递给下一个。Ramda 旨在支持这种编码风格”。关于如何在 promise2 中使用 promise1 的结果,您有更具体的场景吗?
-
我想为此创建一个 polyfill。我无法使用任何第三方库。
-
The result of promise1 will be passed to the promise2 as an argument.什么的参数?promise2不是函数! -
是的,在这种情况下,promise2 不是一个函数,所以它会跳过它,并将相同的参数传递给 promise3。基本上,它应该有一个 (typeof name === 'function' ) 检查。
-
@SaswatArabinda
promise3不是函数...
标签: javascript ecmascript-6 promise es6-promise