У меня возникла ситуация, когда я создаю модуль узла, который возвращается только после завершения асинхронной операции. Один из способов сделать это (показано ниже) - назначить module.exports функцию с параметром обратного вызова. Внутри функции вы затем вернете обратный вызов.понимание module.exports с обратным вызовом
Вот пример того, что я описываю, с сделали будучи обратным вызовом:
// module called test.js
module.exports = function(done) {
// do something asynchronous here
process.nextTick(function() {
done(); // call done when the asynchronous thing is complete...
}
}
Где я получаю повесил трубку, в том, как обратный вызов делается действительно выполняются, учитывая, что я не определяю его в любом месте ...
Например, в javascript vanilla я могу передать завершенное значение в качестве параметра, а затем вызвать его внутри функции, пока я создаю функцию обратного вызова в вызове.
function testAsyncCb(msg, done) {
console.log(msg);
setTimeout(function() {
done();
}, 1000);
console.log("last line in code");
}
testAsyncCb("testing", function(){ console.log("done"); }); // invocation with callback function
Назад в первом примере узла, где вызов module.exports по требует() создает функцию для проделанного() для разрешения на право? Если нет, как разрешается обратный вызов?
Нелегко найти информацию о том, как это работает. Любую помощь/направление оценивают.
Я обновил этот вопрос, чтобы быть более ясными. Используя ваш пример, я все еще не уверен, где определяется обратный вызов get при использовании. Итак, если abc = {myFunc: function (done) {done(); }}, где это делается? – shai
, вам потребуется и вернуть функцию. чем вы можете назвать эту функцию. ваша функция, которую я вижу, получает обратный вызов, поэтому просто вызывайте ее с помощью cb как arg, но все же сам экспорт является синхронизацией, а функция определена и возвращает синхронизацию. как вы вызываете функцию после ее получения, зависит от вас. проверьте ссылки в моем исходном сообщении. – sagie
получил это - ключ обрабатывает функцию require() как объект, как вы упомянули. после синтаксического анализа некоторого кода я понял, что модуль вызывается с обратным вызовом в качестве аргумента, который вы предлагаете в своем комментарии, например, require ('./ some-module) (function() {}); – shai