即使没有return语句,.then()的返回类型也是一个承诺吗?

时间:2018-11-27 12:04:47

标签: javascript typescript ecmascript-6 promise es6-promise

.then()的documentation表示then的返回类型是一个承诺。

所以我的问题是,以下代码块之间是否有区别?

var promise1 = new Promise(function(resolve, reject) {
  resolve('Success!');
});

promise1.then(function(value) {
  console.log(value);
  //no return type specified here
});

var promise1 = new Promise(function(resolve, reject) {
  resolve('Success!');
});

promise1.then(function(value) {
  console.log(value);
  return Promise.resolve();
  //the return type here is a resolved promise with undefined value
});

'return value' segment of the documentation中的第二点向我暗示它们是相同的。

我问的原因是TypeScript似乎区分了两者,当我有Promise的返回类型时,我必须使用第二个代码段而不是第一个代码段

编辑:

我发现了我遇到的问题,而不是因为这个问题。 我有以下代码:

return login() //this returns a promise
.then((response: LoginResponse) => {
        if (!response.success) {
          return Promise.reject();
        }
        console.log('Logged In');
        return Promise.resolve(); //I must write this line otherwise I have a TypeError
      });

这仅仅是因为中的匿名函数由于if块中的Promise.reject()而具有Promise的返回类型。它与.then()块的返回类型无关,而与匿名函数的返回类型无关。

0 个答案:

没有答案