Javascript模式用于在承诺链上返回和转发

时间:2015-11-10 14:34:10

标签: javascript promise q

我学会了爱和利用承诺链。但有时我需要在执行中重复一个阶段。有没有办法在不将承诺链分解为单独的方法的情况下做到这一点?

dataLayer.loginUser(loginData)
    .then(function (response) {

         console.log('loginUser response -> ', response);
         return dataLayer.getData();

    }.bind(this))
    .then(function (response) {

         console.log('loginUser response -> ', response);
         if (response.message === 'JWT_EXPIRED') {
             // Somehow go back to the previous stage
             return dataLayer.refreshJWT().then(...);
         }

      // next stage
      return ...
    });

1 个答案:

答案 0 :(得分:4)

不,没有。您将需要一个单独的功能,您可以参考并再次呼叫。

当然,你可以使用一个命名的函数表达式作为then回调,因此它不会打破"打破"你的连锁店:

dataLayer.loginUser(loginData)
.then(function tryToGetData(response) {
    console.log('loginUser response -> ', response);
    return dataLayer.getData().then(function (response) {
        console.log('loginUser response -> ', response);
        if (response.message === 'JWT_EXPIRED') {
            return tryToGetData(response); // again!
        return response;
    });
}).then(function(response) {
    // next stage
    return …;
});