gpt4 book ai didi

javascript - 如何避免缩进嵌套 promise ?

转载 作者:行者123 更新时间:2023-12-05 09:35:54 25 4
gpt4 key购买 nike

我听说 promises 在代码中应该是线性的,而不是回调(“回调 hell ”)。

虽然我还有一个类似于回调 hell 的场景,希望promise能够make their promise,并且有一个线性语法等价于这个问题代码。

给定 promise p()q()w() 考虑以下代码:

p().then(() => {
q().then(() => {
w().then(() => {
// do something
})
})
})

我们能否制作一个不为每个嵌套 promise 缩进的等效代码?

最佳答案

您不应该嵌套 .then() 处理程序,而是让每个 .then() 创建并返回一个新的 Promise .这就是它设计的工作方式,否则你仍然处于回调 hell ,现在是带有 promise 的版本。没有太大区别。

代码应该是这样的:

p()
.then(() => {
return q();
})
.then(() => {
return w();
})
.then(() => {
// do something
});

如果 .then() 处理程序所做的只是调用下一个函数,您可以将其编写为更简单的形式(阅读 arrow functions ):

p()
.then(() => q())
.then(() => w())
.then(() => {
// do something
});

更进一步,如果不带参数调用qw,代码可以像这样简单:

p()
.then(q)
.then(w)
.then(() => {
// do something
});

或者您可以更进一步,而不是使用 .then().catch()你用await .代码变得更加清晰易读:

try {
await p();
await q();
await w();
// do something
} catch (err) {
// write here the code you would write in the handler you pass to `.catch()
// in the approach that uses Promises
}

备注

如果上面的代码使用await,在函数中使用,那么该函数必须是async function。 (只需将 async 放在它的定义前面)。

使用await的代码may or may not be used outside of a function (即在模块的顶层)取决于您用来运行它的运行时(浏览器、Node.js 等)。

关于javascript - 如何避免缩进嵌套 promise ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65514612/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com