1

我想在 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) => {
    ...
});

但是我没有办法推进那个?

谢谢,

4

3 回答 3

5

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

var fn = Promise.method(function() {

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

});
于 2014-03-03T16:20:59.200 回答
1

没错,new Promise构造函数没有提供触发进度事件的方法。原因可能是关于Promise 构建规范的持续讨论,其中没有一个提议的方法尚未获得批准。

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

于 2014-03-03T15:32:56.933 回答
0

@Esailija

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

return new Promise((resolve, reject) => {
    var deferred = Promise.defer();
    ....
    deferred.progress(10);
    ....
    resolve(deferred.promise);
});
于 2014-03-04T14:04:11.643 回答