为啥在两次调用 promise 时 RSVP Deferred 会产生错误
Posted
技术标签:
【中文标题】为啥在两次调用 promise 时 RSVP Deferred 会产生错误【英文标题】:Why RSVP Deferred produces error when promise is called twice为什么在两次调用 promise 时 RSVP Deferred 会产生错误 【发布时间】:2018-07-17 00:52:41 【问题描述】:为什么在两次调用 promise 时 RSVP Deferred 会产生错误?
deferred.promise.then().finally()
和deferred.promise.then(); deferred.promise.finally()
似乎有区别。为什么?
RSVP.on('error', function(reason)
console.log('Error: ' + reason);
);
var deferred = RSVP.defer();
var deferred2 = RSVP.defer();
var deferred3 = RSVP.defer();
var promise3 = deferred3.promise;
deferred.promise.then(function()
console.log('Resolved');
, function()
console.log('Rejected');
).finally(function()
console.log('Finally');
);
deferred2.promise.then(function()
console.log('Resolved2');
, function()
console.log('Rejected2');
);
deferred2.promise.finally(function()
console.log('Finally2');
);
promise3 = promise3.then(function()
console.log('Resolved3');
, function()
console.log('Rejected');
);
promise3.finally(function()
console.log('Finally3');
);
deferred.reject('Reject!');
deferred2.reject('Reject2!');
deferred3.reject('Reject3!');
<script src="https://cdnjs.cloudflare.com/ajax/libs/rsvp/4.8.1/rsvp.js"></script>
编辑:我发现了如何解决这个问题。查看代码中的 Deferred3。
【问题讨论】:
我发现了问题,请参阅我的示例中的 deferred3! 如果您发现问题,请answer your own question 或直接删除。 【参考方案1】:我发现promise.then()
(和其他方法)返回一个修改过的承诺,所以你必须链接then
、finally
、catch
...方法,否则你必须每次都保存promise
.
RSVP.on('error', function(reason)
console.log('Error: ' + reason);
);
var deferred = RSVP.defer();
var promise = deferred.promise;
promise = promise.then(function()
console.log('Resolved');
, function()
console.log('Rejected');
);
promise.finally(function()
console.log('Finally');
);
deferred.reject('Reject!');
<script src="https://cdnjs.cloudflare.com/ajax/libs/rsvp/4.8.1/rsvp.js"></script>
【讨论】:
以上是关于为啥在两次调用 promise 时 RSVP Deferred 会产生错误的主要内容,如果未能解决你的问题,请参考以下文章
为啥在使用promise时使用Q,bluebird框架? [复制]