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);
}