2017-01-11 10 views
0

Say вы передаете следующий код eval()управления потоком Eval()

function async(cb) { 
    setTimeout(function(){ 
     console.log('hello'); 
     cb(); 
    },50) 
} 

async(function(){ 
    console.log('goodbye') 
}) 

и это будет сегмент кода с использованием eval()

console.log('start') 

try { 
    var output = eval(code_from_above) 
} catch(e) { 
    console.log(e.message) 
} 

console.log('end') 

Окончательный вывод консоли будет:

start 
end 
hello 
goodbye 

Есть ли способ добавить слушателя событий в оператор eval, который w ould fire, как только асинхронный код завершен? Это приведет к следующему выпуску консоли?

start 
hello 
goodbye 
end 
+0

Почему вы используете 'eval'? –

ответ

0

Нет обработчика событий Javascript для завершения вызова функции. Но вы можете просто переместить до конца функции setTimeout:

function async(cb) { 
    setTimeout(function(){ 
     console.log('hello'); 
     cb(); 
     console.log('end'); 
    },50); 
} 

async(function(){ 
    console.log('goodbye'); 
}); 
0

Вы должны использовать обещание.

var code_from_above = ` 
 
function async() { 
 
    return new Promise(resolve => setTimeout(resolve, 50)) 
 
    .then(() => console.log('hello')); 
 
} 
 
async().then(() => console.log('goodbye'))`; 
 

 
console.log('start') 
 
try { 
 
    var output = eval(code_from_above); 
 
} catch(e) { 
 
    console.log(e.message); 
 
} 
 
output.then(() => console.log('end'));

 Смежные вопросы

  • Нет связанных вопросов^_^