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);
});
请注意,您当前的代码有许多语法问题需要更正。
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);
});
请注意,您当前的代码有许多语法问题需要更正。