Javascript 映射文件名和承诺内容结果
我使用bluebird来表示承诺,并尝试获取多个文件的内容;我想要的是能够获取文件的内容及其文件名,例如:Javascript 映射文件名和承诺内容结果,javascript,bluebird,Javascript,Bluebird,我使用bluebird来表示承诺,并尝试获取多个文件的内容;我想要的是能够获取文件的内容及其文件名,例如: result={'file1.md':content} 我一直在尝试这样的事情: var files = [ { filename: 'README.md', url: 'assetFiles/README.md' }, { filename: 'CHANGELOG.md', url: 'assetFiles/CHANGELOG.md' }, { filename:
result={'file1.md':content}
我一直在尝试这样的事情:
var files = [
{ filename: 'README.md', url: 'assetFiles/README.md' },
{ filename: 'CHANGELOG.md', url: 'assetFiles/CHANGELOG.md' },
{ filename: 'ISSUES_TEMPLATE.md', url: 'assetFiles/ISSUES_TEMPLATE.md' },
{ filename: 'PULL_REQUEST_TEMPLATE.md', url: 'assetFiles/PULL_REQUEST_TEMPLATE.md' }];
return Promise.all(files.map(function(file) {
return [file.filename, fs.readFileAsync(file.url, 'utf-8')];
}))
.then(function(results){
console.log(results);
};
但是,我从中得到的是一个数组,如:
result=[['file1.md',Promise],…]代码>
如何使用bluebird将文件名与文件内容结合起来?以避免创建新的承诺(所谓的“承诺构造函数反模式”):
您的代码无法工作,因为Promise.all()
需要一个Promise数组,但您正在向它传递一个数组,即这些[数据,Promise]
。因此,它不知道如何等待所有的承诺
因为您使用的是蓝鸟,所以可以直接使用。它将数组.map()
迭代与Promise.all()
自动组合在一起:
return Promise.map(files, function(file) {
return fs.readFileAsync(file.url, "utf-8").then(data => [file.filename, data]);
});
在这里记录.catch()
将“吃掉”拒绝,而不会返回拒绝。谢谢,我们对此进行了调整。还有Promise.map
方法。
return Promise.map(files, function(file) {
return fs.readFileAsync(file.url, "utf-8").then(data => [file.filename, data]);
});