Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将承诺错误解析为高阶承诺可以吗_Javascript_Promise - Fatal编程技术网

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