【发布时间】:2019-09-29 21:46:06
【问题描述】:
我正在尝试从 .then 结构中的 blob 数据创建一个新的 File 对象,然后在第二个 .then 中读取该文件的信息。
但是第二个在第一个结束之前运行,所以文件对象还没有被填充。
这是正常行为吗?我应该创建一个异步函数,在第一个函数中调用,然后确保第二个函数在之后被严格调用吗?
let output = {file: {}, file_infos: {}},
image = FileAPI.Image(src_file);
await Promise.all(Object.keys(parameters).map(async (parameter_name) => { // Pass file threw all modifiers (resizing, rotation, overlaying)
try {
image = await FileMethods[parameter_name](image, parameters[parameter_name]);
return image;
}
catch(err) {
console.log(err);
};
}))
.then((output_image) => {
output_image[0].toBlob((blob) => {
output.file = new File([blob], src_file.name); // Need this to be fullfilled before step2
console.log('step1');
});
})
.then(() => {
console.log('step2');
FileAPI.getInfo(output.file, (err/**String*/, infos/**Object*/) => {
if( !err ){
output.file_infos = infos;
} else {
console.log("this is triggered because output.file isn't filled yet");
}
})
});
// console.log(output);
return output;
控制台显示:
step2
this is triggered because output.file isn't filled yet
step1
感谢您的帮助:)
【问题讨论】:
-
已有正确答案。只是想说如果你使用 async-await 而不是 promise then 链,那将是一个很好的补充。
-
将 await 与
.then混合并不是最佳做法
标签: javascript file asynchronous promise async-await