2017-05-08 10 views
0

Angenommen, diese bitte:Wie kann ich die Verarbeitung stoppen, bis setTimeout() fertig ist?

setTimeout(function(){ 
    console.log('one'); 
}, 3000); 

console.log('two'); 

I one zuerst, und dann two in der Konsole gedruckt werden sollen. Der aktuelle Code druckt zuerst two.

Wie kann ich die Verarbeitung stoppen, bis setTimeout() fertig ist?

Beachten Sie, dass ich setTimeout() einmal ausführen möchte. nicht alle 3 sek.


Hier ist mein richtiger Code:

var arr = ['mohammad', 'ali', 'zahra', 'fatemeh'], 
    res = [], 
    status = true; 

function myfunc() { 
    if (status == true) { 
    alert('test'); 
    console.log('Engine started fetching a new one!'); 
    status = false; 
    $('.im_dialogs_search_field').val(arr[0]); 
    $('.im_dialogs_search_field').trigger('change'); 
    setTimeout(function() { 
     if ($('li.im_dialog_wrap').length) { 
     res.push($(this.find('.im_dialog_photo').attr('src'))); 
     } else { 
     console.log('There is no result for ' + arr[0]); 
     status = true; 
     } 
    }, 3000); 
    arr.shift(); 
    } else { 
    console.log('Engine is bussy!'); 
    } 
} 

Wenn ich myfunc() Funktion aufrufen, es wirft immer Engine is bussy!. Was ist los mit dir?

+2

Verschieben Sie den Code von 'two' am Ende des' Timeout' Callbacks. – Tushar

+0

Kannst du die 'console.log ('two')' innerhalb der 'setTimeout' Funktion setzen –

+2

hast du eine globale Variable mit dem Namen" status "erstellt, die bereits vom Fenster benutzt wird, sie umbenennen oder in einen anderen Bereich legen. –

Antwort

2
setTimeout(function(){ 
    console.log('one'); 
    afterTimeout(); 
}, 3000); 

function afterTimeout(){ 
    console.log('two'); 
} 

Hoffnung.

1

bewegen console.log('two') innen timeout dieses Versuchen, das hilft

setTimeout(function(){ 
 
    console.log('one'); 
 
    console.log('two'); 
 
}, 3000);

Verwandte Themen