ES6 为什么要 return 一个承诺?

ES6 why does one have to return a promise?

两者有什么区别(没有return)

function doAsyncTask() {
  var promise = new Promise((resolve, reject) => {
    setTimeout(() => {
      console.log("Async Work Complete");
      if (error) {
        reject();
      } else {
        resolve();
      }
    }, 1000);
  });
  return promise;
}

以下没有"Return Promise"

function doAsyncTask() {
  var promise = new Promise((resolve, reject) => {
    setTimeout(() => {
      console.log("Async Work Complete");
      if (error) {
        reject();
      } else {
        resolve();
      }
    }, 1000);
  });
}

ES6 why does one have to return a promise?

你不知道。

What's the difference between the two (without a return)

不同的是,一个什么都不return。

(因此您不能调用 doAsyncTask 并使用 return 值)。

var doAsyncTask1 = function() {
   var promise = new Promise(resolve => {
        /// task that takes 5 seconds
        setTimeout(resolve, 5000);
   });
   return promise;
}

var doAsyncTask2 = function() {
   var promise = new Promise(resolve => {
        /// task that takes 5 seconds
        setTimeout(resolve, 5000);
   });
   // no return
}

await doAsyncTask1();
console.log('task complete'); // this line of code runs 5 seconds after the previous one

await doAsyncTask2(); // because you have returned nothing, 'await' does nothing
console.log('task2 not complete yet'); // this line of code runs immediately after the previous one, before the 5-second task is complete

作为 Quentin's 的扩展,您应该 return 始终承诺。

想法是,如果一个函数是异步函数,它应该提供一种监听变化的方法。由来电者决定他们是否需要对更改做出反应。

所以你可以这样调用你的函数:

doAsyncTask().then(...);

doAsyncTask();

但如果我们不return承诺,调用者将永远无法选择监听。