Promise.each 没有蓝鸟
Promise.each without bluebird
我需要在 bluebird 上使用 Promise.each
。但是当我看到捆绑文件时,我实际上在考虑是否使用 bluebird。
任何人都可以给我一个使用像 bluebird Promise.each
没有依赖关系的函数的例子。
如果我们查看有关 MDN 的 Promise
文档,您会发现我们可以使用两种方法。 all
和 race
,前者在所有承诺都解决时结束,而后者在第一个承诺解决时结束。
这应该为您提供了使用蓝鸟 Promise.each
可以做的所有事情的工具。如果还不能解决你的问题,请说出你的具体问题,我看看能不能帮到你。
当然可以:
Promise.each = function(arr, fn) { // take an array and a function
// invalid input
if(!Array.isArray(arr)) return Promise.reject(new Error("Non array passed to each"));
// empty case
if(arr.length === 0) return Promise.resolve();
return arr.reduce(function(prev, cur) {
return prev.then(() => fn(cur))
}, Promise.resolve());
}
或使用现代 JS(Chrome 或 Edge 或使用转译器):
Promise.each = async function(arr, fn) { // take an array and a function
for(const item of arr) await fn(item);
}
我需要在 bluebird 上使用 Promise.each
。但是当我看到捆绑文件时,我实际上在考虑是否使用 bluebird。
任何人都可以给我一个使用像 bluebird Promise.each
没有依赖关系的函数的例子。
如果我们查看有关 MDN 的 Promise
文档,您会发现我们可以使用两种方法。 all
和 race
,前者在所有承诺都解决时结束,而后者在第一个承诺解决时结束。
这应该为您提供了使用蓝鸟 Promise.each
可以做的所有事情的工具。如果还不能解决你的问题,请说出你的具体问题,我看看能不能帮到你。
当然可以:
Promise.each = function(arr, fn) { // take an array and a function
// invalid input
if(!Array.isArray(arr)) return Promise.reject(new Error("Non array passed to each"));
// empty case
if(arr.length === 0) return Promise.resolve();
return arr.reduce(function(prev, cur) {
return prev.then(() => fn(cur))
}, Promise.resolve());
}
或使用现代 JS(Chrome 或 Edge 或使用转译器):
Promise.each = async function(arr, fn) { // take an array and a function
for(const item of arr) await fn(item);
}