2016-03-21 17 views
2

Bunun için motivasyon, ilk eşzamanlı kodda olanları bile .catch biten tüm olası hataları yakalayabilmektir.javascript vaat bluebird zincirini hataları işleyen şekilde başlatın

ben şöyle sözümü zincirini başlamak istiyorum

: bbPromise.do fonksiyonu gibi çalışır bir işlev

const bbPromise = require('bluebird'); 
bbPromise.do(() => { 
    someTask(); // Could throw 
    return someVar.doSomeOtherTaskAsync(); 
}) 
.then((result) => { 
    // Do something with result 
}) 
.catch((err) => { 
    console.log('err: ', err); 
}); 

var mı? bbPromise.resolve, bana aktarılmamış, tüm lambda işlevini verir.

bbPromise.bind({}).then(() => { 
    someTask(); // Could throw 
    return someVar.doSomeOtherTaskAsync(); 
}) 
... 

hatta:

new bbPromise((resolve, reject) => { 
    someTask(); // Could throw 
    return someVar.doSomeOtherTaskAsync().then(resolve).catch(reject); 
}) 
... 

Fakat bu biraz dolaylı olan

Ben böyle bir şey yapabileceğini biliyorum. Sadece bir söz verebilecek bir işlevi yerine getirerek bir söz zinciri başlatmak için iyi bir yol var mı, ve .catch sonundaki hataları yakalayan hatalar var mı?

cevap

5

Promise.try aradığınız gibi görünüyor. Promise.resolve, zaten bir değere sahip olduğunuz ve ondan bir söz zinciri oluşturmak istediğinizde uygundur, ancak atabileceğiniz bir kod çalıştırmak istiyorsanız, bunun yerine Promise.try kullanın.

trythen gibi aynı şekilde herhangi bir senkron istisna ile ilgili, alır ve bir işlev gerçekleştirir. Sonunda bir şeye benzersiniz:

bbPromise.try(someTask).then(() => { 
    return someVar.doSomeOtherTaskAsync(); 
}).then((result) => { 
    // Do something with result 
}).catch((err) => { 
    console.log('err: ', err); 
});