JavaScript/Node.JS在另一个承诺中返回承诺无效

JavaScript/Node.JS在另一个承诺中返回承诺无效,javascript,node.js,callback,promise,Javascript,Node.js,Callback,Promise,我对那些承诺有些困惑,不明白为什么我不能把一个承诺变成另一个承诺。我的问题如下,我有一个函数save: save(Driver) { this.exists(Driver).then(exist => { if(exist) { return new Promise(function (resolve, reject) { if (exist === true) { re

我对那些承诺有些困惑,不明白为什么我不能把一个承诺变成另一个承诺。我的问题如下,我有一个函数save:

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));
我得到一个错误,说
无法读取未定义的
的属性'then',我无法理解为什么,因为我返回了一个承诺。

感谢您的帮助

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

save(Driver) {
  return this.exists(Driver);
};
此外,您还未正确使用此功能<代码>保存
函数可以使用
值进行解析,因此您需要在
中验证此值,然后
回调,并使用
捕获
回调查找可能的错误:

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

您没有从
save()
返回任何内容<代码>返回this.exists(Driver)。然后(…
还有,
result
的定义在哪里?是的,很抱歉我试图简化代码,忘记了更改文本,我修复了,请在问题中也修复它。你的意思是
this.exists(Driver)中的返回。然后(…
不是函数的返回?否。
exist=>{…}
是另一个简写函数(“箭头函数”)。