我是JS和Node的新手。我的困惑是如何将值从异步任务推送到数组,然后在完成所有操作后打印数组。
我的代码是:
function movieNames(dirname) {
return new Promise(function (resolve, reject) {
dir.files(dirname, function (err, files) {
if (err) {
reject(err)
} else {
resolve(files)
}
})
})
}
function movieMetadata(path) {
return new Promise(function (resolve, reject) {
probe(path, function (err, probeData) {
if (err) {
reject(err)
} else {
resolve(probeData)
}
})
})
}
var movies = []
movieNames('D:/Media').then(function (moviepaths) {
moviepaths.forEach(function (moviepath) {
movieMetadata(moviepath).then(function (movie) {
//console.log(movie)
movies.push(movie)
}, function (error) {
console.log(error)
})
})
}, function (error) {
console.log(error)
}).then(function () {
console.log(movies)
})
当我运行此代码时,它只打印空数组'[]'。
我还运行以下代码:
var i=0;
movieNames('D:/Media').then(function (moviepaths) {
moviepaths.forEach(function (moviepath) {
movieMetadata(moviepath).then(function (movie) {
//console.log(movie)
movies.push(movie)
console.log(i++)
// movies = movie
}, function (error) {
console.log(error)
})
})
}, function (error) {
console.log(error)
}).then(function () {
console.log(movies)
})
输出为:node movieNames.js [] 0 1 2 3 4 五 6 7 8 9 10 11 12 13 14 15 16 17 18
我无法理解为什么console.log(电影)在console.log(i ++)之前被执行。如果我只是修复此问题,我相信代码应运行正常。