【问题标题】: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 或直接删除。

标签: javascript asynchronous promise deferred rsvp.js


【解决方案1】:

我发现promise.then()(和其他方法)返回一个修改过的承诺,所以你必须链接thenfinallycatch...方法,否则你必须每次都保存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>

【讨论】:

    猜你喜欢
    • 2016-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-03
    • 2018-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多