gpt4 book ai didi

javascript - 如何等待包含 promise 的函数

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

如果我们有这个功能

const getData = () => {
foo()
.then(result => {
return result;
})
.catch(error => {
return error;
});
};

虽然 getData 本身不是一个 promise,但它包含一个异步的 promise。

那么等待 getData 返回内容的最佳方式是什么。 Async/Await 不起作用,因为它们使用 promises。

谢谢。

最佳答案

目前,getData() 不返回任何内容。您需要让它返回一个 Promise,这样您就可以 await 它或将 .then() 链接到它。

const getData = () => {
return foo() // <-- here
.then(result => {
return result;
})
.catch(error => {
throw error;
});
};

// Now you can do :
getData().then(...)
// or :
const data = await getData();

在这种情况下,您还可以省略大括号和显式 return,并将其隐式化:

const getData = () => foo()
.then(result => {
return result;
})
.catch(error => {
throw error;
});

嘿,那是什么:

.then(result => {
return result;
})

这什么都不做。它接受一个值并简单地返回它而不做任何事情。您可以将其删除。

您现在可以这样重写 getData() :

const getData = async () => {
try {
return await foo()
} catch (error) {
throw error;
}
}

就此而言,这:

.catch(error => { throw error; });

或者这个:

catch (error) { throw error; }

也没什么用,它们只是“中继”(冒泡)必须在调用函数中捕获的错误。

很明显 getData 几乎只做了一件事,它返回 foo(),这是一个 Promise。它只是一个 Promise 的包装器……所以它实际上毫无用处。

最重要的是,detData() 完全没有用。 foo 是一个 Promise;编写一个返回 Promise 的函数,这样您就可以像使用 Promise 一样使用它,这只是……一个带有额外步骤的 Promise。直接使用foo即可。

let result;
try {
result = await foo();
} catch (error) {
console.log(error);
}
console.log(result);

关于javascript - 如何等待包含 promise 的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70507412/

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