網站搜尋

javascript - 即使沒有 return 語句,.then() 的返回類型也是 promise 嗎?


.then() 的文件說明指出 then 的回傳類型是一個 promise。

所以我的問題是,以下程式碼區塊之間有差別嗎?

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
});

文件說明中「返回值」部分的第二點讓我覺得它們是相同的。

我之所以這麼問,是因為 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
      });

這僅僅是因為 then 中的匿名函數的返回類型是 Promise,這是由於 if 塊中的 Promise.reject()。這與 .then() 塊的返回類型無關,而是與匿名函數的返回類型有關。