Javascript 嵌套承诺无法正确解析,仅在使用分解的承诺处理程序时返回承诺
有类似的问题,如,和,但没有帮助 我们有嵌套的承诺,但它们没有解决。最外层的承诺返回一个承诺,而不是从最内层的承诺返回数据 目标是将承诺处理程序分解为如下所示的单独函数(例如,Javascript 嵌套承诺无法正确解析,仅在使用分解的承诺处理程序时返回承诺,javascript,ecmascript-6,promise,es6-promise,Javascript,Ecmascript 6,Promise,Es6 Promise,有类似的问题,如,和,但没有帮助 我们有嵌套的承诺,但它们没有解决。最外层的承诺返回一个承诺,而不是从最内层的承诺返回数据 目标是将承诺处理程序分解为如下所示的单独函数(例如,requestdidcessfuel,requestDidFail) 我们如何做到这一点,同时确保最外层的承诺得到适当回报 Codepen 代码 class TestClass { translate() { // Create promise. let promise = $.D
requestdidcessfuel
,requestDidFail
)
我们如何做到这一点,同时确保最外层的承诺得到适当回报
Codepen
代码
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);
}
调用类的方法时,必须添加
this.
,就像this.requestDidSucceed()
一样
一个问题,为什么不在类中使用
this.requestdidcessfuel
?bm.translate()。然后(successResult=>requestdidcessfuel(promise,successResult)).catch(errorResult=>requestDidFail(promise,errorResult))代码>-这将不会调用其方法,而是全局requestdidsecessfuel(successReult)
函数。@yash,因为这是错误。:)谢谢你的帮助!对不起,你指的是哪封电子邮件?
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);
}