在JS中返回promise时的语法

时间:2017-11-26 16:58:04

标签: javascript syntax promise

我正在学习ES6的承诺,并想确认我理解语法。 (如果这有效,但有更好的方法,我也很想知道它!)

假设我正在编写一个返回promise的函数。 (比方说因为我想在一个函数中包装一个async()。then()。then()。then()的序列。)

问题1:我是否正确地认为我需要一个函数,包含在then()中,包含在一个执行函数中,包装在一个promise构造函数中,包含在原始函数中,如下所示?

function iReturnAPromise() {
  //do some stuff here
  return new Promise(function(resolve, reject) {
    doAnAsyncThing()
      .then(...)
      .then(...)
      .then(function(results) {
        //resolve with another promise or reject with an error based on results
      });
  });
}

这种嵌套似乎很疯狂,而且比承诺的“回调地狱/金字塔的厄运”还要糟糕。我是否过于复杂(可能是因为我误解了承诺的某些部分)或者这真的是语法?

问题2:我们假设确实是语法。以下两个片段是否相同?是一个比另一个惯用的吗?

a)在return语句之前做一堆东西,并在promise执行器中只保留异步内容,如下所示:

function iReturnAPromise() {
  //do stuff here
  //do more stuff
  //do even more stuff
  return new Promise(function(resolve, reject) {
    doAnAsyncThing()
      .then(...)
      .then(...)
      .then(...);
  });
}

b)在promise执行者中包装所有内容,如下所示:

function iReturnAPromise() {
  return new Promise(function(resolve, reject) {
    //do stuff here
    //do more stuff
    //do even more stuff
    doAnAsyncThing()
      .then(...)
      .then(...)
      .then(...);
  });
}

0 个答案:

没有答案