[英]Why is `Promise.then` called twice in a React component but not the console.log?
[英]Why RSVP Deferred produces error when promise is called twice
為什么當兩次調用promise時,RSVP Deferred會產生錯誤?
看來deferred.promise.then().finally()
和deferred.promise.then(); deferred.promise.finally()
之間有區別deferred.promise.then(); deferred.promise.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。
我發現promise.then()
(和其他方法)返回了修改后的promise,因此您必須鏈接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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.