Javascript 在返回所有承诺的价值之前,我如何等待所有承诺得到解决?
我正在使用蓝鸟的Javascript 在返回所有承诺的价值之前,我如何等待所有承诺得到解决?,javascript,promise,bluebird,Javascript,Promise,Bluebird,我正在使用蓝鸟的Promise.map。我正在尝试等待所有承诺得到解决,然后再调度包含对象数组的事件 readFiles(){ const fileArray=Array.from(this.fileSelectInput.files) 常量承诺=[] window.Promise.map(文件数组,(文件,索引)=>{ 返回window.jsmediatags.read(文件{ onSuccess:tag=>{ 承诺,推动({ id:索引+1, 标题:tag.tags.title | |未定
Promise.map
。我正在尝试等待所有承诺得到解决,然后再调度包含对象数组的事件
readFiles(){
const fileArray=Array.from(this.fileSelectInput.files)
常量承诺=[]
window.Promise.map(文件数组,(文件,索引)=>{
返回window.jsmediatags.read(文件{
onSuccess:tag=>{
承诺,推动({
id:索引+1,
标题:tag.tags.title | |未定义,
艺术家:tag.tags.artist | |未定义
})
承诺.排序((a,b)=>a.id-b.id)
console.log('我应该是第一个')
}
})
}).然后(()=>{
console.log('我应该是第二个')
此.dispatchEvent(新CustomEvent('tracks-selected'){
细节:承诺
}))
}
}
您可能正在寻找
const fileArray = Array.from(this.fileSelectInput.files);
window.Promise.map(fileArray, file => {
return new Promise((resolve, reject) => {
window.jsmediatags.read(file, {
onSuccess: resolve,
// also pass reject as an error handler if jsmediatags supports that
});
});
}).then(tags => {
const results = tags.map(tag => ({
id: index + 1,
title: tag.tags.title || undefined,
artist: tag.tags.artist || undefined
}));
// results.sort((a, b) => a.id - b.id) - not necessary given .map() keeps the order
this.dispatchEvent(new CustomEvent('tracks-selected', {
detail: results
}))
});
window.jsmediatags.read
是否返回承诺?如果不是,那么就没有等待的承诺使用Promise.map
时不应该存储承诺数组。应该从回调中为每个迭代结果返回承诺。就是这样。我忘了向Promise.map返回新承诺