私はEmberのサービスで約束をする方法を理解しようとしています。私は実際には不可能と思われる理由を理解できませんは、チェーン拒否の以前の約束であると呼ばれるサービス機能を持っています。Ember約束サービス機能
もっと明確にするために、いくつかの異なる場所(サービス)に配置されるいくつかの約束をつなぎたいと思います。
return new Ember.RSVP.Promise(function(resolve, reject) {
resolve();
}).then(function() {
return new Ember.RSVP.Promise(function (resolve, reject) {
Ember.run.later(function() {
console.log('One');
resolve();
}, 3000);
});
}).then(function() {
return new Ember.RSVP.Promise(function (resolve, reject) {
Ember.run.later(function() {
console.log('Two');
resolve();
}, 3000);
});
}).then(function() {
return new Ember.RSVP.Promise(function (resolve, reject) {
Ember.run.later(function() {
console.log('Three');
resolve();
}, 3000);
});
}).then((resolve) => {
console.log(resolve);
}, (reject) => {
console.log(reject);
});
をしかし、私は正確に同じ約束を含むサービス関数の呼び出しを有する第2約束機能を交換しようとすると、それは奇妙な行動を開始し、次のように単純化され、動作するコードは、見えます。
return new Ember.RSVP.Promise(function(resolve, reject) {
resolve();
}).then(this.get('demoService.serviceFunction')()).then(function() {
return new Ember.RSVP.Promise(function (resolve, reject) {
Ember.run.later(function() {
console.log('Two');
resolve();
}, 3000);
});
}).then(function() {
return new Ember.RSVP.Promise(function (resolve, reject) {
Ember.run.later(function() {
console.log('Three');
resolve();
}, 3000);
});
}).then((resolve) => {
console.log(resolve);
}, (reject) => {
console.log(reject);
});
2番目のケースでは、最初の約束が解決されたか拒否されたかにかかわらず、demoService.serviceFunctionが呼び出されます。関数がthis.get( 'demoService.serviceFunction')()またはhis.get( 'demoService')。serviceFunction()のように呼び出されるかどうかは関係ありません。
私は、問題を示すために責めを作成しました:https://ember-twiddle.com/67016c1cc440b0920e440d9fb1b18289は - コンソールは常に最初の約束が拒否された場合には、ケースすべきではないServiceFunctionCalledを出力しているようです。
私がここで間違っていることについて、誰かが私に洞察を与えてくれることを願っています。前もって感謝します!