Что такое чистый способ использования bluepird promisified fs
методов? readdir
создаст массив файлов и папок, но если я, в свою очередь, зациклю каталоги, которые он предоставляет, я в конечном итоге напишу что-то очень похожее на парадигму вложенности обратного вызова (за исключением того, что она даже не работает). Какова стандартная практика, связывающая эти обещания таким образом, чтобы их возвращаемые значения могли быть зациклированы?Как (не) в гнездо `then` производить методы обещания?
var Promise = require('bluebird');
var fs = Promise.promisifyAll(require('fs-extra'));
var path = require('path');
var junk = require('junk');
//this does not work
fs.readdirAsync('./node_modules')
.bind(this)
.then((modules) => {
this.allFiles = [];
modules = modules.filter((item) => junk.not && !/^\./.test(item));
modules.forEach((module, index, modulesArray) => {
fs.readdirAsync(path.join('node_modules', module)) //ugly af and don't even get files to next `then`!
.then((files) => {
console.log(files); // yep, array of files all right
this.allFiles.push(files);
});
})
})
.then(() => {
console.log('all of the files', this.allFiles) // => [] no files
})
.catch((err) => {
console.error('error! error!', err);
})
Вы можете использовать 'async' и' await' некоторые из обещаний. – ssube
использование названных функций – zzzzBov
@zzzzBov Не могли бы вы более подробно рассказать о том, как это может решить проблему? Благодаря! – 1252748