我正在学习Node并且有一个函数可以递归目录并返回与模式匹配的文件的承诺。这工作得很好,但我希望能够同时处理任意类型的文件,我正在链接这样的函数:
findFiles(scriptLocation, '.type1.').then(function (type1Files) {
console.log('type1Files: ' + type1Files)
findFiles(scriptLocation, '.type2.').then(function (type2Files) {
console.log('type2Files: ' + type2Files)
findFiles(scriptLocation, '.type3.').then(function (type3Files) {
console.log('type3Files: ' + type3Files)
})
})
})
但是当我添加更多类型时,它可能变得非常草率。我试过了
Q.all([
findFiles(scriptLocation, '.type1.')
, findFiles(scriptLocation, '.type2.')
, findFiles(scriptLocation, '.type3.')
]).then(function(type1Files, type2Files, type3Files){
// all files returned in the first parameter...
})
我喜欢第二个版本的语法,但它并没有完全符合我的要求,因为结果不会单独返回,而是汇总成一个结果。
我使用Q作为我的承诺库。
答案 0 :(得分:1)
改为使用spread
:
Q.all([
findFiles(scriptLocation, '.type1.')
, findFiles(scriptLocation, '.type2.')
, findFiles(scriptLocation, '.type3.')
]).spread(function(type1Files, type2Files, type3Files){
// ...
})
来自DOCs:
如果您对数组有承诺,则可以使用
spread
代替数组。扩展函数将值“扩展”到履行处理程序的参数上。拒绝处理程序将在第一次失败时被调用。也就是说,无论哪个收到的承诺失败,首先都会被拒绝处理程序处理。