javascript - 等待 ".then"解决

标签 javascript angularjs promise

我一直对“然后”不被等待的行为感到困扰,我明白其原因。然而,我仍然需要绕过它。 这是我的用例。

doWork(family) {
    return doWork1(family)
            .then(resultOfWork1 => doWork2(resultOfWork1));
}

doWork1(family) {
   if (1 === family) {
       return doFamily1();
   } else {
       return doFamily2();
   }
}

doFamily1() {
    return $http(urlToFamily1)
            .then(response => parseFamily1Result(response));
}

parseFamily1Result(response) {
    return parsed response in a family1 way;
}

doFamily2() {
    return $http(urlToFamily2)
            .then(response => parseFamily2Result(response));
}

parseFamily2Result(response) {
   return parsed response in a family2 way;
}

doWork2(resultOfWork1) {
    // use resultOfWork1
}

我正在做的事情的问题是,在 doWork2 中,resultOfWork1 未定义,因为在到达 doWork2 之前不需要执行“then” promise 。

有没有办法保证“然后”的实现? 或者说这种做事方式有什么问题吗?

最佳答案

您错误地链接了 Promise。

而不是

doWork(family) {
    return doWork1(family)
            .then(doWork2(resultOfWork1));
}

更改为

doWork(family) {
    return doWork1(family)
            .then(function(resultOfWork1){ doWork2(resultOfWork1); });
}

或者

doWork(family) {
    return doWork1(family)
            .then(doWork2);
}

您还需要对以下代码进行类似的更改。

$http(urlToFamily1)
            .then(parseFamily1Result(response));

$http(urlToFamily2)
            .then(parseFamily2Result(response));

关于javascript - 等待 ".then"解决,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45081738/

相关文章:

javascript - 在基于 promise 的循环中避免递归堆栈溢出?

javascript - Safari:更改源然后直接调用 play 会引发 DOMError aborterror

javascript - 如何在异步调用期间填充数组并将其发送到响应对象中

javascript - 为对象数组 react 输入 setState

javascript - 如何查看屏幕外的元素

javascript - 如何在 AngularJS 中对变化的列表进行动画处理?

ember.js - 使用 emberJS 和 Handlebars 显示来自 promise 的 map

javascript - 无法执行链式 promise

javascript - AngularJS 没有正确解析大括号

javascript - Angular ngStorage 自定义对象