JavaScript / Node.JS在另一个承诺中返回一个承诺不起作用

时间:2017-09-15 09:40:47

标签: javascript node.js callback promise

我对那些承诺事情有点困惑,无法理解为什么我不能将承诺归还给另一个承诺。我的问题如下,我有一个功能保存:

save(Driver) {
    this.exists(Driver).then(exist => {
        if(exist) {
            return new Promise(function (resolve, reject) {
                if (exist === true) {
                    resolve(true);
                } else if (exist === false) {
                    resolve(false);
                } else {
                    reject(err);
                }
            });
        }
    });
};

虽然很简单,但当我尝试将该功能调用如下时:

save(driver).then(this.common.saveSuccess(res))
            .catch(this.common.noSuccess(res));

我收到一条错误,说Cannot read property 'then' of undefined,我无法理解为什么我要回信。 感谢您的帮助

1 个答案:

答案 0 :(得分:1)

您的save功能非常复杂。您不需要嵌套承诺,只需从this.exists函数返回结果(承诺):

save(Driver) {
  return this.exists(Driver);
};

此外,您错误地使用此功能。可以使用savetrue值解析false函数,因此您需要在then回调中验证此值,并使用catch回调查找可能的错误:< / p>

save(driver)
  .then(exists => {
    if (exists) {
      this.common.saveSuccess(res);
    } else {
      this.common.noSuccess(res)
    }
  })
  .catch(err => // process error here);