相关疑难解决方法(0)

等到所有ES6承诺完成,甚至拒绝承诺

假设我有一组承诺正在发出网络请求,其中一个会失败:

// http://does-not-exist will throw a TypeError
var arr = [ fetch('index.html'), fetch('http://does-not-exist') ]

Promise.all(arr)
  .then(res => console.log('success', res))
  .catch(err => console.log('error', err)) // This is executed   
Run Code Online (Sandbox Code Playgroud)

让我们说我想等到所有这些都结束了,不管一个人是否失败了.对于我可以没有的资源,可能存在网络错误,但如果我可以获得,我希望在继续之前.我想优雅地处理网络故障.

既然Promise没有留下任何空间,那么在不使用promises库的情况下,处理此问题的推荐模式是什么?

javascript promise es6-promise

351
推荐指数
6
解决办法
11万
查看次数

Bluebird Promise.all - 多个承诺完成了聚合成功和拒绝

今天有人用蓝鸟提出了一个有趣的案例,处理多项承诺的最佳方法是什么,我们对于停止特定的履行或拒绝不感兴趣,而是对检查最终结果感兴趣.一个例子:

var p1 = new Promise(function(f,r){
    setTimeout(function(){
        console.log("p1");
        f("yay");
    }, 100);

});

var p2 = new Promise(function(f,r){
    setTimeout(function(){
        console.log("p2");
        r(new Error("boo"));
    }, 200);

})

var p3 = new Promise(function(f,r){
    setTimeout(function(){
        console.log("p3");
        r(new Error("yay"));
    }, 300);

});

var p4 = new Promise(function(f,r){
    setTimeout(function(){
        console.log("p4");
        f("yay");
    }, 400);

});


//Promise.all([p1,p2, p3, p4]).then(function(p){
//    console.log("Results:",p);
//}).error(function(e){
//    console.log("Error:",e);
//});

Promise.map([p1,p2, p3, p4],function(p){
    console.log("results:",p);
}, {concurrency:10}).error(function(e){
    console.log("Error:",e);
});
Run Code Online (Sandbox Code Playgroud)

在这里,如果我们运行地图或所有被拒绝的承诺将导致处理程序不报告结果.

例如,上面实现的运行Promise.map的结果是:

debugger listening on port 65222
p1
results: yay
p2
Error: [Error: boo]
p3
p4 …
Run Code Online (Sandbox Code Playgroud)

javascript node.js promise bluebird

29
推荐指数
1
解决办法
2万
查看次数

过滤/恢复Promise.all结果

例如:

function myFunc(args ...){
  ...
  return Promise.all(myPromisesArray)
}
Run Code Online (Sandbox Code Playgroud)

如果内部的承诺myPromisesArray失败,我将只在返回值中得到拒绝原因.

有没有办法恢复所有其他已解决的值?

javascript es6-promise

1
推荐指数
1
解决办法
242
查看次数

标签 统计

javascript ×3

es6-promise ×2

promise ×2

bluebird ×1

node.js ×1