嵌套承诺无法正确解决,仅在使用分解的承诺处理程序时返回承诺
Nested promises not resolving properly, only returning promise when using decomposed promise handlers
有类似的问题, , and this,但是none有帮助。
我们有嵌套的承诺,但它们没有解决。不是从最内层的承诺返回数据,而是最外层的承诺 returns 一个承诺。
目标是将承诺处理程序分解为单独的函数,如下所示(例如,requestDidSucceed
、requestDidFail
)。
我们如何在确保最外层承诺 returns 正确的同时做到这一点?
Codepen
https://codepen.io/Crashalot/pen/0ba95ebb26d0f68fb95ea065ef6af3dd?editors=0002
代码
class TestClass {
translate() {
// Create promise.
let promise = $.Deferred();
let bm = new BatchManagerClass();
bm.translate()
.then( successResult => requestDidSucceed(promise, successResult) )
.catch( errorResult => requestDidFail(promise, errorResult) );
// Return promise.
return promise;
}
requestDidSucceed(promise, successResult) {
promise.resolve(successResult);
}
requestDidFail(promise, errorResult) {
promise.reject(errorResult);
}
}
class BatchManagerClass {
translate() {
// Create promise.
let promise = $.Deferred();
let test = new ServiceClass();
test.makeRequest()
.then( successResult => requestDidSucceed(promise, successResult) )
.catch( errorResult => requestDidFail(promise, errorResult) );
// Return promise.
return promise;
}
requestDidSucceed(promise, successResult) {
promise.resolve(successResult);
}
requestDidFail(promise, errorResult) {
promise.reject(errorResult);
}
}
class ServiceClass {
makeRequest() {
let promise = $.Deferred();
promise.resolve('This works');
return promise;
}
}
let test = new TestClass();
test.translate()
.then( successResult => requestDidSucceed(successResult) )
.catch( errorResult => requestDidFail(errorResult) );
function requestDidSucceed(successResult) {
console.log('Success result: ' + successResult);
}
function requestDidFail(errorResult) {
console.log('Failure result: ' + errorResult);
}
调用class的方法时,必须加上this.
,如this.requestDidSucceed()
。
class TestClass {
translate() {
// Create promise.
let promise = $.Deferred();
let bm = new BatchManagerClass();
bm.translate()
.then( successResult => this.requestDidSucceed(promise, successResult) )
.catch( errorResult => this.requestDidFail(promise, errorResult) );
// Return promise.
return promise;
}
requestDidSucceed(promise, successResult) {
promise.resolve(successResult);
}
requestDidFail(promise, errorResult) {
promise.reject(errorResult);
}
}
class BatchManagerClass {
translate() {
// Create promise.
let promise = $.Deferred();
let test = new ServiceClass();
test.makeRequest()
.then( successResult => this.requestDidSucceed(promise, successResult) )
.catch( errorResult => this.requestDidFail(promise, errorResult) );
// Return promise.
return promise;
}
requestDidSucceed(promise, successResult) {
promise.resolve(successResult);
}
requestDidFail(promise, errorResult) {
promise.reject(errorResult);
}
}
class ServiceClass {
makeRequest() {
let promise = $.Deferred();
promise.resolve('This works');
return promise;
}
}
let test = new TestClass();
test.translate()
.then( successResult => requestDidSucceed(successResult) )
.catch( errorResult => requestDidFail(errorResult) );
function requestDidSucceed(successResult) {
console.log('Success result: ' + successResult);
}
function requestDidFail(errorResult) {
console.log('Failure result: ' + errorResult);
}
有类似的问题
我们有嵌套的承诺,但它们没有解决。不是从最内层的承诺返回数据,而是最外层的承诺 returns 一个承诺。
目标是将承诺处理程序分解为单独的函数,如下所示(例如,requestDidSucceed
、requestDidFail
)。
我们如何在确保最外层承诺 returns 正确的同时做到这一点?
Codepen
https://codepen.io/Crashalot/pen/0ba95ebb26d0f68fb95ea065ef6af3dd?editors=0002
代码
class TestClass {
translate() {
// Create promise.
let promise = $.Deferred();
let bm = new BatchManagerClass();
bm.translate()
.then( successResult => requestDidSucceed(promise, successResult) )
.catch( errorResult => requestDidFail(promise, errorResult) );
// Return promise.
return promise;
}
requestDidSucceed(promise, successResult) {
promise.resolve(successResult);
}
requestDidFail(promise, errorResult) {
promise.reject(errorResult);
}
}
class BatchManagerClass {
translate() {
// Create promise.
let promise = $.Deferred();
let test = new ServiceClass();
test.makeRequest()
.then( successResult => requestDidSucceed(promise, successResult) )
.catch( errorResult => requestDidFail(promise, errorResult) );
// Return promise.
return promise;
}
requestDidSucceed(promise, successResult) {
promise.resolve(successResult);
}
requestDidFail(promise, errorResult) {
promise.reject(errorResult);
}
}
class ServiceClass {
makeRequest() {
let promise = $.Deferred();
promise.resolve('This works');
return promise;
}
}
let test = new TestClass();
test.translate()
.then( successResult => requestDidSucceed(successResult) )
.catch( errorResult => requestDidFail(errorResult) );
function requestDidSucceed(successResult) {
console.log('Success result: ' + successResult);
}
function requestDidFail(errorResult) {
console.log('Failure result: ' + errorResult);
}
调用class的方法时,必须加上this.
,如this.requestDidSucceed()
。
class TestClass {
translate() {
// Create promise.
let promise = $.Deferred();
let bm = new BatchManagerClass();
bm.translate()
.then( successResult => this.requestDidSucceed(promise, successResult) )
.catch( errorResult => this.requestDidFail(promise, errorResult) );
// Return promise.
return promise;
}
requestDidSucceed(promise, successResult) {
promise.resolve(successResult);
}
requestDidFail(promise, errorResult) {
promise.reject(errorResult);
}
}
class BatchManagerClass {
translate() {
// Create promise.
let promise = $.Deferred();
let test = new ServiceClass();
test.makeRequest()
.then( successResult => this.requestDidSucceed(promise, successResult) )
.catch( errorResult => this.requestDidFail(promise, errorResult) );
// Return promise.
return promise;
}
requestDidSucceed(promise, successResult) {
promise.resolve(successResult);
}
requestDidFail(promise, errorResult) {
promise.reject(errorResult);
}
}
class ServiceClass {
makeRequest() {
let promise = $.Deferred();
promise.resolve('This works');
return promise;
}
}
let test = new TestClass();
test.translate()
.then( successResult => requestDidSucceed(successResult) )
.catch( errorResult => requestDidFail(errorResult) );
function requestDidSucceed(successResult) {
console.log('Success result: ' + successResult);
}
function requestDidFail(errorResult) {
console.log('Failure result: ' + errorResult);
}