Я пытаюсь понять, почему настройки ниже обещания не работают.Использование обещаний с fs.readFile в цикле
(Примечание: Я уже решил эту проблему с async.map Но я хотел бы узнать, почему мои попытки ниже не работает.).
Правильное поведение должно быть: bFunc должен работать столько времени, сколько необходимо, чтобы fs читал все файлы изображений (bFunc ниже запускается дважды), а затем консоль cFunc печатает «Конец».
Спасибо!
Попытка 1: Она запускается и останавливается в cFunc().
var fs = require('fs');
bFunc(0)
.then(function(){ cFunc() }) //cFunc() doesn't run
function bFunc(i){
return new Promise(function(resolve,reject){
var imgPath = __dirname + "/image1" + i + ".png";
fs.readFile(imgPath, function(err, imagebuffer){
if (err) throw err;
console.log(i)
if (i<1) {
i++;
return bFunc(i);
} else {
resolve();
};
});
})
}
function cFunc(){
console.log("End");
}
Попытка 2: В этом случае я использовал для цикла, но он выполняет из строя. Консольные отпечатки: Конец, bFunc done, bFunc done
var fs = require('fs');
bFunc()
.then(function(){ cFunc() })
function bFunc(){
return new Promise(function(resolve,reject){
function read(filepath) {
fs.readFile(filepath, function(err, imagebuffer){
if (err) throw err;
console.log("bFunc done")
});
}
for (var i=0; i<2; i++){
var imgPath = __dirname + "/image1" + i + ".png";
read(imgPath);
};
resolve()
});
}
function cFunc(){
console.log("End");
}
Спасибо за помощь заранее!
В попытке 1, где вы обработчик ошибок для 'bFunc'? Если ошибка выдается, вы никогда не узнаете об этом с вашим текущим кодом. – nils
Для чего этот код? Просьба описать проблему, которую вы пытаетесь решить словами, а не просто показывать нам код, который не делает то, что вы хотите. В коде есть много чего-то неправильного, поэтому я лучше начну понимать проблему, которую нужно решить, чем пытаться переделать все, что не так с вашим кодом, не зная конечной цели. – jfriend00
@nils не вызывает ошибку при bFunc! Но я думаю, я должен положить улов в конце цепи. – David