Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 映射文件名和承诺内容结果_Javascript_Bluebird - Fatal编程技术网

Javascript 映射文件名和承诺内容结果

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:

我使用bluebird来表示承诺,并尝试获取多个文件的内容;我想要的是能够获取文件的内容及其文件名,例如:

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]);
});