gpt4 book ai didi

node.js - 这个异步转换的 promise 是否正确?为什么不需要等待?

转载 作者:太空宇宙 更新时间:2023-11-04 00:04:43 25 4
gpt4 key购买 nike

我对这段代码做出了 promise 。

function f (number) {
return new Promise((resolve, reject) => {
if (number === 42) {
resolve({ success : "bar" })
}

reject({ bar : "foo" })
})
}

f(42)
.then(success)
.catch(bar);

f(43)
.then(success)
.catch(bar);

function success(input) {
console.log(input)
}

function bar() {
console.log("marianna")
}

下面尝试将 Promise 转换为 async/await 语法:

async function f (number) {
if (number === 42) {
return { success : "bar" }
}

throw { bar : "foo" }
}

f(42)
.then(success)
.catch(bar);

f(43)
.then(success)
.catch(bar);

function success(input) {
console.log(input)
}

function bar() {
console.log("marianna")
}

两个脚本给出的输出是相等的。我认为转换是正确的,但我仍然很难“读取”异步代码。

无论如何,..为什么不需要等待?什么时候需要await?

最佳答案

await 可以提高代码阅读能力。它将异步函数调用视为同步调用。

在您的示例中,假设我是否想在 f(42) 完成后运行 f(43)。对于这种情况,我可以这样做

f(42)
.then(() => {
success();
return f(43);
})
.then(success)
.catch(bar);

await相比

async function f (number) {
if (number === 42) {
return { success : "bar" }
}

throw { bar : "foo" }
}

async function run() {
try {
const result42 = await f(42); // async function but called like sync function
success(result42);

const result43 = await f(43);
success(result43);
} catch(error) {
bar(error);
}
}

run();

function success(input) {
console.log(input)
}

function bar() {
console.log("marianna")
}

关于node.js - 这个异步转换的 promise 是否正确?为什么不需要等待?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52867702/

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