【问题标题】:nodejs how to use multiple await promisesnodejs如何使用多个等待承诺
【发布时间】:2018-05-27 11:19:49
【问题描述】:

如何在我的代码中使用多重承诺等待?当我想使用第二个等待作为第二个承诺时,它会抛出一个错误

function ReadJSONFile() {
    return new Promise((resolve, reject) => {
        fs.readFile('import.json', 'utf-8', (err, data) => { 
            if (err) reject(err);
            resolve(JSON.parse(data));
         });
    });
}

const Get_Image = async (Path) => {

    Child_Process = exec('node get_image.js "'+Path+'",(err,stdout,stderr) =>
         return new Promise((resolve,reject) => {
            resolve(stdout);
         });



}


const Catch = async () => {
    let get_json_file = await ReadJSONFile(); // this works perefectly

    for(var i=0;i< Object.keys(get_json_file);i++) {
        console.log(await Get_Image(get_json_file[i].image_path); //but this throw error
    }
}

【问题讨论】:

    标签: javascript node.js asynchronous async-await ecmascript-2017


    【解决方案1】:

    你没有返回一个承诺,这就是你得到错误的原因

    const Get_Image = async (Path) => {
       return new Promise((resolve,reject) => {
        Child_Process = exec('node get_image.js "'+Path+'",(err,stdout,stderr) =>
          
                resolve(stdout);
             });
    
        });
    
    }

    【讨论】:

    • 但是如果你看到我的代码,我返回了一个带有值的新承诺,有什么区别?你返回了我只返回值的所有子进程,为什么这不正确?
    • 您没有返回未定义的承诺,因为您什么也没返回。 exec 函数是异步的,它需要一个回调,这意味着您从此函数的返回值早已从您的同步代码中消失了。 await keywork 与 promise 一起使用
    猜你喜欢
    • 1970-01-01
    • 2021-11-26
    • 2018-09-12
    • 2016-10-16
    • 2017-06-24
    • 2021-10-10
    相关资源
    最近更新 更多