Node.js 如何按顺序运行3个函数?
我有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
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!');
});
可能的重复可能的重复