Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何按顺序运行3个函数?_Node.js - Fatal编程技术网

Node.js 如何按顺序运行3个函数?

Node.js 如何按顺序运行3个函数?,node.js,Node.js,我有3个功能: function createDir(){ fs.mkdirs('./quickstart',function(){ console.log("thao thanh cong"); }); } function unZip(){ fs.createReadStream('./prestashop_cache/' + quickstart).pipe(unzip.Extract({path:'./quickstart'})); con

我有3个功能:

function createDir(){
    fs.mkdirs('./quickstart',function(){
        console.log("thao thanh cong");
    });
}
function unZip(){
    fs.createReadStream('./prestashop_cache/' + quickstart).pipe(unzip.Extract({path:'./quickstart'}));
    console.log("giai nen xong");
}
function copydata(){
    if (path.extname(folder + '/samples' + version + '/data') != '.DS_Store' && path.extname(folder + '/samples' + version + '/data') != '.svn' && path.extname(folder + '/samples' + version + '/data') != '__MACOSX') {
        fs.copy(folder + '/samples' + version + '/data','./quickstart/prestashop/install/data/', function () {
            console.log("coppy thanh cong toi thu muc data");
        });
    }
}

我想执行上面的3个函数:createDir()完成->解压();完成->复制数据()

您可以使用承诺或包来完成此任务

如果您更喜欢使用async包,那么可以使用
async.瀑布(…)
函数,它接受异步函数并按顺序执行它们。您可以选择仅将此函数与包一起导入

另外,如果您选择
异步瀑布
,您可能必须执行类似的操作(我没有测试此代码,因此您可能需要进行一些编辑以使其适合您):


您可以使用承诺或包来完成此任务

如果您更喜欢使用async包,那么可以使用
async.瀑布(…)
函数,它接受异步函数并按顺序执行它们。您可以选择仅将此函数与包一起导入

另外,如果您选择
异步瀑布
,您可能必须执行类似的操作(我没有测试此代码,因此您可能需要进行一些编辑以使其适合您):


您基本上需要执行下一个打印console.log的函数。基本上:

function createDir(){
    fs.mkdirs('./quickstart',function(){
        console.log("thao thanh cong");
        unZip(); // CALL UNZIP WHEN WE ARE FINISHED
    });
}
function unZip(){
    var zipfile = fs.createReadStream('./prestashop_cache/' + quickstart);
    zipfile.pipe(unzip.Extract({path:'./quickstart'}));
    zipfile.on('end',function(){
        console.log("giai nen xong");
        copydata(); // CALL COPYDATA WHEN WE ARE FINISHED
    });
}
function copydata(){
    if (path.extname(folder + '/samples' + version + '/data') != '.DS_Store' && path.extname(folder + '/samples' + version + '/data') != '.svn' && path.extname(folder + '/samples' + version + '/data') != '__MACOSX') {
        fs.copy(folder + '/samples' + version + '/data','./quickstart/prestashop/install/data/', function () {
            console.log("coppy thanh cong toi thu muc data");
        });
    }
}
但这不是很模块化,是吗?它在函数之间创建了太多的依赖关系,因此不能重用任何函数。没问题!Javascript允许您将函数作为参数传递:

function createDir(callback){
    fs.mkdirs('./quickstart',function(){
        console.log("thao thanh cong");
        if (callback) {
            callback(); // Call a function when finished
        }
    });
}
function unZip(callback){
    var zipfile = fs.createReadStream('./prestashop_cache/' + quickstart);
    zipfile.pipe(unzip.Extract({path:'./quickstart'}));
    zipfile.on('end',function(){
        console.log("giai nen xong");
        if (callback) {
            callback(); // Call a function when finished
        }
    });
}
function copydata(callback){
    if (path.extname(folder + '/samples' + version + '/data') != '.DS_Store' && path.extname(folder + '/samples' + version + '/data') != '.svn' && path.extname(folder + '/samples' + version + '/data') != '__MACOSX') {
        fs.copy(folder + '/samples' + version + '/data','./quickstart/prestashop/install/data/', function () {
            console.log("coppy thanh cong toi thu muc data");
            if (callback) {
                callback(); // Call a function when finished
            }
        });
    }
}
现在你可以这样称呼他们:

createDir(function(){
    unZip(function(){
        copydata()
    });
});
createDir()
.then(unZip)
.then(copydata)
.then(function(){
    console.log('all done!');
});
或者,对于node.js的较新版本,您可以使用承诺。它基本上做相同的事情,但使用可链接的语法:

function createDir(){
    return new Promise(function(callback,error_callback){
        fs.mkdirs('./quickstart',function(){
            console.log("thao thanh cong");
            callback();
        });
    });
}
function unZip(){
    return new Promise(function(callback,error_callback){
        var zipfile = fs.createReadStream('./prestashop_cache/' + quickstart);
        zipfile.pipe(unzip.Extract({path:'./quickstart'}));
        zipfile.on('end',callback);
    });
}
function copydata(){
    return new Promise(function(callback,error_callback){
        if (path.extname(folder + '/samples' + version + '/data') != '.DS_Store' && path.extname(folder + '/samples' + version + '/data') != '.svn' && path.extname(folder + '/samples' + version + '/data') != '__MACOSX') {
            fs.copy(folder + '/samples' + version + '/data','./quickstart/prestashop/install/data/', function () {
                console.log("coppy thanh cong toi thu muc data");
                callback();
            });
        }
        else {
            error_callback('not found');
        }
    });
}
您现在可以这样称呼它:

createDir(function(){
    unZip(function(){
        copydata()
    });
});
createDir()
.then(unZip)
.then(copydata)
.then(function(){
    console.log('all done!');
});

您基本上需要执行下一个打印console.log的函数。基本上:

function createDir(){
    fs.mkdirs('./quickstart',function(){
        console.log("thao thanh cong");
        unZip(); // CALL UNZIP WHEN WE ARE FINISHED
    });
}
function unZip(){
    var zipfile = fs.createReadStream('./prestashop_cache/' + quickstart);
    zipfile.pipe(unzip.Extract({path:'./quickstart'}));
    zipfile.on('end',function(){
        console.log("giai nen xong");
        copydata(); // CALL COPYDATA WHEN WE ARE FINISHED
    });
}
function copydata(){
    if (path.extname(folder + '/samples' + version + '/data') != '.DS_Store' && path.extname(folder + '/samples' + version + '/data') != '.svn' && path.extname(folder + '/samples' + version + '/data') != '__MACOSX') {
        fs.copy(folder + '/samples' + version + '/data','./quickstart/prestashop/install/data/', function () {
            console.log("coppy thanh cong toi thu muc data");
        });
    }
}
但这不是很模块化,是吗?它在函数之间创建了太多的依赖关系,因此不能重用任何函数。没问题!Javascript允许您将函数作为参数传递:

function createDir(callback){
    fs.mkdirs('./quickstart',function(){
        console.log("thao thanh cong");
        if (callback) {
            callback(); // Call a function when finished
        }
    });
}
function unZip(callback){
    var zipfile = fs.createReadStream('./prestashop_cache/' + quickstart);
    zipfile.pipe(unzip.Extract({path:'./quickstart'}));
    zipfile.on('end',function(){
        console.log("giai nen xong");
        if (callback) {
            callback(); // Call a function when finished
        }
    });
}
function copydata(callback){
    if (path.extname(folder + '/samples' + version + '/data') != '.DS_Store' && path.extname(folder + '/samples' + version + '/data') != '.svn' && path.extname(folder + '/samples' + version + '/data') != '__MACOSX') {
        fs.copy(folder + '/samples' + version + '/data','./quickstart/prestashop/install/data/', function () {
            console.log("coppy thanh cong toi thu muc data");
            if (callback) {
                callback(); // Call a function when finished
            }
        });
    }
}
现在你可以这样称呼他们:

createDir(function(){
    unZip(function(){
        copydata()
    });
});
createDir()
.then(unZip)
.then(copydata)
.then(function(){
    console.log('all done!');
});
或者,对于node.js的较新版本,您可以使用承诺。它基本上做相同的事情,但使用可链接的语法:

function createDir(){
    return new Promise(function(callback,error_callback){
        fs.mkdirs('./quickstart',function(){
            console.log("thao thanh cong");
            callback();
        });
    });
}
function unZip(){
    return new Promise(function(callback,error_callback){
        var zipfile = fs.createReadStream('./prestashop_cache/' + quickstart);
        zipfile.pipe(unzip.Extract({path:'./quickstart'}));
        zipfile.on('end',callback);
    });
}
function copydata(){
    return new Promise(function(callback,error_callback){
        if (path.extname(folder + '/samples' + version + '/data') != '.DS_Store' && path.extname(folder + '/samples' + version + '/data') != '.svn' && path.extname(folder + '/samples' + version + '/data') != '__MACOSX') {
            fs.copy(folder + '/samples' + version + '/data','./quickstart/prestashop/install/data/', function () {
                console.log("coppy thanh cong toi thu muc data");
                callback();
            });
        }
        else {
            error_callback('not found');
        }
    });
}
您现在可以这样称呼它:

createDir(function(){
    unZip(function(){
        copydata()
    });
});
createDir()
.then(unZip)
.then(copydata)
.then(function(){
    console.log('all done!');
});
可能的重复可能的重复