您好我正在尝试了解下面的代码有什么问题。
代码:
const Promise = require('bluebird')
const fs = Promise.promisifyAll(require("fs"));
var config = {
"files": [{
"path1": "bla.js",
"path2": "bla.js"
}]
}
var baseDir ='./'
function validateConfig(config) {
return Promise.each(config.files, (file) =>
Promise.each([file.path1, file.path2], (path) =>{
fs.statAsync(baseDir+ path)
console.log(baseDir + path)
}
)
)
}
validateConfig(config).then(config => validateConfig(config))
我不知道为什么会这样?如果有人可以解释它会很好。
TypeError: expecting an array or an iterable object but got [object Null]]
修改 我创建了一个自包含的示例来显示问题。 错误发生在最后一行
validateConfig(config).then(config => validateConfig(config))
这只是一个例子。通常我会在.then()
答案 0 :(得分:0)
你的问题是
.then(config => validateConfig(config));
它正在使用某种validateConfig
对象回调config
,该对象与您首先给出的const看起来不一样。
我解决了你的问题:
const Promise = require('bluebird')
const fs = Promise.promisifyAll(require("fs"));
const config = {
"files": [{
"path1": "bla.js",
"path2": "bla.js"
}]
};
const baseDir = './';
function validateConfig(config) {
return Promise.all(
config.files
.reduce((fileList, file) => fileList.concat([file.path1, file.path2]), []) // this just gives you a list of files
.map(path => fs.statAsync(baseDir + path)) // this returns the promises of stat'ing each file
)
.catch(err => {
console.log(err);
});
}
validateConfig(config)
.then(statFiles => console.log(statFiles));