Чтобы await
имел какой-либо значимый эффект, вам нужно дождаться обещания. Он не будет выдавать никаких исключений, если вы ожидаете не-обещания, но также не задержит переход к следующему коду.
Чтобы взять код, написанный с помощью обратных вызовов, и превратить его в обещание, вам нужно заключить его в новое обещание. Для вашего случая это, вероятно, будет выглядеть так:
await new Promise((resolve, reject) => {
ipfs.files.add(this.state.file, (err,result) => {
if(err){
reject(err);
return;
}
console.log('profile hash ' + result[0].hash);
this.setState({profilePic : result[0].hash , continue : true});
resolve(result);
});
});
Теперь, когда вы ожидаете обещание, выполнение этой асинхронной функции будет приостановлено, пока это обещание не будет разрешено. Позже код в асинхронной функции не будет работать до тех пор.
Если вы делаете достаточное количество вызовов ipfs.files.add, вы можете захотеть создать вспомогательную функцию, которая создаст обещание за вас. Как в:
function add(file) {
return new Promise((resolve, reject) => {
ipfs.files.add(file, (err, result) => {
if (err) {
reject(err);
} else {
resolve(result);
}
});
}
}
// to be used as:
const result = await add(this.state.file);
console.log('profile hash ' + result[0].hash);
this.setState({profilePic : result[0].hash , continue : true});