小编Dav*_*vid的帖子

在循环中使用带有fs.readFile的Promises

我试图理解为什么下面的承诺设置不起作用.

(注意:我已经用async.map解决了这个问题.但是我想知道为什么我的下面的尝试不起作用.)

正确的行为应该是:bFunc应该运行尽可能多的时间来读取所有图像文件(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");
}
Run Code Online (Sandbox Code Playgroud)

尝试2:在这种情况下,我使用了for循环,但它执行顺序不正常.控制台打印:结束,bFunc完成,bFunc完成

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 …
Run Code Online (Sandbox Code Playgroud)

readfile node.js promise

30
推荐指数
4
解决办法
6万
查看次数

标签 统计

node.js ×1

promise ×1

readfile ×1