ES6为什么必须要兑现承诺?

时间:2020-02-11 09:58:14

标签: javascript angular es6-promise

两者之间有什么区别(无回报)

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

以下没有“退货承诺”

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

3 个答案:

答案 0 :(得分:3)

ES6为什么必须要兑现承诺?

你没有。

两者之间有什么区别(无回报)

区别在于一个人什么都不返回。

(因此,您无法调用doAsyncTask并利用返回值)。

答案 1 :(得分:3)

作为Quentinanswer的扩展,您应该始终返回承诺。

想法是,如果一个函数是一个异步函数,它应该提供一种监听更改的方法。呼叫者可以决定是否需要对更改做出反应。

因此您可以将函数调用为:

doAsyncTask().then(...);

或者只是

doAsyncTask();

但是,如果我们不返回承诺,则呼叫者将永远不会选择听。

答案 2 :(得分:-3)

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