与Bluebird在安全代码块中的进展

时间:2014-03-02 07:50:32

标签: promise bluebird

我想在Bluebird中创建一个安全且可以访问progress()的代码块 - 这是可能的:

实现我想要的一种方法是使用异常处理程序 - 但我正在寻找一种解决方案:

var deferred = Promise.defer();
try {
    ...
    deferred.progress(10);
    ...
} catch(e) {
    deferred.reject(e);
} 
return deferred.promise;

另外根据文件:

  

不鼓励使用Promise.defer - 它比使用新Promise更尴尬和容易出错。

所以我可以这样做:

return new Promise((resolve, reject) => {
    ...
});

但是我没办法推进那个?

谢谢,

3 个答案:

答案 0 :(得分:5)

Promise.method可用于使任何功能安全

var fn = Promise.method(function() {

    var deferred = Promise.defer();
    deferred.progress(10);
    return deferred.promise;

});

答案 1 :(得分:1)

你是对的,new Promise构造函数没有提供触发进度事件的方法。原因可能是正在进行的关于promise construction spec的讨论,其中尚未批准任何提议的方法。

您可以查看PromiseResolver .progress() method的作用:您只需要在承诺上调用“私有”,未记录的._progress()方法 - 但这是不可取的。

答案 2 :(得分:0)

@Esailija

谢谢,几乎我最终得到的......

return new Promise((resolve, reject) => {
    var deferred = Promise.defer();
    ....
    deferred.progress(10);
    ....
    resolve(deferred.promise);
});