Я (относительный) узел новичка, попадающий в систему, и весь энтузиазм в сообществе для «просто писать обратные вызовы, все асинхронно и управляться событиями, не волнуйтесь!» оставил меня немного запутанным относительно потока управления в рамках одной программы (или в более узких терминах, поток управления при обработке одного запроса в более крупной программе)Все функции «обратного вызова» узла «Потенциально асинхронные»?
Если у меня есть следующая программа, запускаемая под узлом
var foo = function(){
console.log("Called Foo");
};
var bar = function(){
console.log("Called Bar");
};
var doTheThing = function(arg1, callback){
callback();
};
doTheThing(true, function() {
foo();
});
bar();
есть любой шанс, что foo
выполнит послеbar
? Когда я запускаю программу локально с помощью командной строки, это всегда
Called Foo
Called Bar
, но я вижу так много предупреждений из хорошо предназначенных евангелистов вдоль линий не думайте, что ваш обратный вызов будет вызываться, когда вы думаете, что будет , что я не знаю, будут ли они просто предупреждать меня о деталях реализации библиотеки, или если node.js делает что-то странное/специальное, когда вы используете объект функции в качестве параметра. не
Нет никаких шансов. Все, что у вас есть, синхронно. Проблема возникает, когда вы используете асинхронные обратные вызовы (например, условия гонки setTimeout), или когда используемая библиотека использует асинхронные вещи (например, объекты jQuery '$ .Deferred'). ** РЕДАКТИРОВАТЬ: ** Я понял, что вы в основном говорите об узле, но я не понимаю, почему будет какая-то разница ... Надеюсь, я не ошибаюсь! Но не должно быть причин, по которым порядок будет отличаться, если вы не используете асинхронные функции ** конкретно ** (который не является вашим кодом) – Ian
@ Я уверен, что вы правы, но я делал это достаточно долго, чтобы никогда не принимать что-либо о новой технологии, если я не проверил h-l и не получил подтверждения от сверстников. –
Эй, вот почему я прокомментировал, надеясь, что больше людей присоединятся и обсудят :) – Ian