Javascript 将承诺错误解析为高阶承诺可以吗
将承诺错误解析为高阶承诺可以吗 前 从数据库获取数据可以调用其他异步函数。Javascript 将承诺错误解析为高阶承诺可以吗,javascript,promise,Javascript,Promise,将承诺错误解析为高阶承诺可以吗 前 从数据库获取数据可以调用其他异步函数。 拒绝未将错误返回到较高的承诺因为等待也适用于非承诺,您可以保存整个承诺构造: const async_function = () => get_data_from_db(); (async()=>{ try { //call async function const data = await async_function(); console.log
拒绝未将错误返回到较高的承诺因为
等待
也适用于非承诺,您可以保存整个承诺
构造:
const async_function = () => get_data_from_db();
(async()=>{
try {
//call async function
const data = await async_function();
console.log(data);
} catch (err) {
console.error(err.message);
}
})();
解决承诺可以吗
有时候没关系。将被拒绝的承诺视为“异步抛出”和捕获块
但您的代码是反模式的一个示例
您可以像这样重写它:
const async_function = () =>
get_data_from_db()
.catch(e => e) // it will be resolved with e
如果您对此有原因(例如,您修补了一个应用程序,该应用程序使用预期参数顺序的回调)。如果您可以在应用程序中随时知道承诺成功和失败的时间,“拒绝没有将错误返回到更高的承诺”-因为您从未在任何地方调用
reject
过…!?这不是您应该使用的async/await
。您将一个resolve,reject
传递给一个promise构造函数,但是async/await
的美妙之处在于,您的返回和错误抛出会自动转换为分别的resolve和rejects!
const async_function = async (resolve, reject) => {
// some code
get_data_from_db
.then(data => resolve(null,data))
.catch(e => resolve(e, null)
}
const async_function = () =>
get_data_from_db()
.catch(e => e) // it will be resolved with e