nodejs, как использовать несколько обещаний ожидания

как я могу использовать многообещающее ожидание в своих кодах? когда я хочу использовать второе ожидание для второго обещания, это выдает ошибку

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
    }
}

person Community    schedule 13.12.2017    source источник


Ответы (1)


вы не вернули обещание, поэтому вы получили ошибку

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

    });

}

person Amit Wagner    schedule 13.12.2017
comment
но если вы видите мой код, я вернул новое обещание со значением, в чем разница? вы вернули весь дочерний процесс, я вернул только значение, почему это неправильно? - person ; 13.12.2017
comment
вы не вернули обещание, которое вы возвращаете undefined, поскольку ничего не возвращаете. Функция exec является асинхронной, она принимает обратный вызов, что означает, что возвращаемое вами значение из этой функции давно ушло из вашего кода синхронизации. await keywork работает с обещанием - person Amit Wagner; 13.12.2017