2016-08-08 61 views
-2

请帮我删除setTimeout的下面的代码向前面的函数在JavaScript完成后执行的功能

var fileArray=ReadDir.readFilesFromDirectory(full_path); 
setTimeout(function(){ 
setTimeout(function(){fileArray.forEach(function (val,index,array) { 
     /* time taken statements 
     Define arg1*/ 
     ` setTimeout(function() { 
     /* time taken statements 
     Define arg2,arg3*/ 
     ConnectToFirebase.linkToFirebase(arg1,arg2,arg3); 
     setTimeout(function() { 
      process.exit(0);},10000) ; 
     },500);//function 4 
    });//function 3 
    },500);//function 2 
},500);//function 1 

我想以前的功能完成后,下面的函数的执行(),即,一个个 因为它创造的问题时,先前的功能需要执行

+2

请参阅事件处理程序和回调 –

+0

@Jonasw 我试图实现在下面的示例中的事件处理程序,但它不能执行事件调用 之前完成的时间服用功能(陈述) 'var events = require('events'); eventEmitter = new events.EventEmitter(); var a = function() {var c = null; ()函数(){ console.log(“LONG TIME FUNCTION”); c = b; },5000); eventEmitter.emit(c); console.log(c); } eventEmitter.on(“a”,a); var b = function() { console.log('This is function b'); eventEmitter.emit('a'); } eventEmitter.on(“b”,b); eventEmitter.emit('b');' –

+0

调试它。什么错了? –

回答

0

更多的时候,你折腾这样的:

AsyncCall(); 
console.log("t"); 

浏览器不会等到AsyncEvent完成。他继续前进,并在另一个例程中处理该功能。

| 
| 
AsyncCall(); ---------->finished 
|        ( | ) (what we want) 
\/        ( | ) 
console.log("test"); <-----| 

由于您不能等到事件结束,才发明回调函数和事件处理函数。 那回调的样子:

function async(callback){ 
//function executes 
callback(); 
//the passed code is executed 
} 

要使用回调运行功能,只需做:

async(function(){//code ran later}); 

事件Hanlers几乎相同:

window.onload=function(){} 

因为我不是使用node.js我不能告诉你你是如何异步事件工作。潜入文档和它找出来:)

相关问题