我想在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) => {
...
});
但是我没办法推进那个?
谢谢,
答案 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);
});