Return in .then(), 当有多个.then()?

Return in .then(), when there are multiple .then()?

JS 不是我的第一语言,很长一段时间。我编写了另外 5 或 6 个代码,并且对回调很满意,这意味着我应该能够理解承诺。

但是,我继承了一个node.js项目,有这样的东西(简化),这让我不确定)

let promise = someFunction.then({return xxxx;});    

// lots of more code & promises

Promises.all().then(() => {return somethingElse});

我对很多承诺感到满意,Promises.all() 等待它们全部解决(尽管我将所有 .then 替换为 await 以获得更清晰的代码),但是 ...

return 里面 .then 让我很不安。如果我理解正确,.then 只是包装了一个异步回调——这可能随时发生,甚至在代码的其余部分和 Promises.all 之前发生,留下一些未执行的代码。

我的担心是否正确,还是我遗漏了什么?

Tl;dr - 在 .then 中 return 可以吗?

返回内部 .then 是非常常见的,也是可以做到的。它所做的是生成一个 Promise,该 Promise 现在解析为值 returned(而不是先前 Promise 的值 returned)。示例:

// resolves to 1
const prom1 = Promise.resolve(1);

// chains off of prom1, resolves to 2
const prom2 = prom1.then(() => {
  return 2;
});

prom1.then(console.log);
setTimeout(() => {
  prom2.then(console.log);
});

当您需要将值从先前的 .then 传递到后续的 .then 时,此技术非常有用。

const makeApiCall = num => Promise.resolve(num + 3);

Promise.resolve(1)
  .then((result1) => {
    return makeApiCall(result1);
  })
  .then((result2) => {
    console.log(result2);
  });

return 在您的情况下具体会做什么:

let promise = someFunction.then({return xxxx;});    

// lots of more code & promises

Promises.all().then(() => {return somethingElse});

如果 promise 传递给 Promise.all,那么它的解析值将是 xxxx,而不是 someFunction 解析的任何值。 (如果 Promise.all.then 忽略它的参数,那么它除了等待 returned 值解析外什么都不做,如果它是一个 Promise。)

const someFunction = () => Promise.resolve(1);
let promise = someFunction().then(() => {
  return 'xxxx';
});

Promise.all([promise]).then((allResults) => {
    console.log('allResults', allResults);
    return 'somethingElse';
  })
  .then((result2) => {
    console.log('Next `.then`', result2);
  });

请注意,您当前的代码有许多语法问题需要更正。