#javascript #cpp #nodejs
Имеется какой-то модуль, например user-module.js: var fs = require('fs'); fs.unlink('/tmp/hello', function (err) { // Это CallBack, который оставляет после себя модуль. if (err) throw err; console.log('successfully deleted /tmp/hello'); }); // Таких CallBack-ов в модуле может быть много, или не быть совсем. Имеется какой-то код на JavaScript. В некоторой точке код должен загрузить модуль и после этого узнать какие CallBack-и оставил после себя этот модуль. Пример: var domain = require('domain'); var d = domain.create(); d.run(function() { require('user-module'); }); Как в этой точке получить список CallBack-ов, которые оставил после себя user-module. Интересуют любые способы. На JS, с помощью addon-а на C++, etc.
Ответы
Ответ 1
Никак, сущности callback на самом деле не существует (это абстракция), есть параметры функции, есть стэк. Для того, чтобы получить какой-то интерактив, существуют promise т.е. пишите в своем модуле var fs = require('fs'); var Promise = require("promise").Promise; var promise = new Promise(); fs.unlink('/tmp/hello', function (err) { // Это CallBack, который оставляет после себя модуль. if (err) { return promise.reject(err); }; promise.resolve('successfully deleted /tmp/hello'); }); return promise; а в вызывающем коде: var domain = require('domain'); var d = domain.create(); d.run(function() { require('user-module').then(succesUser, failUser); }); function sucessUser(message) { console.log(message); } function failUser(message) { throw new Error('message'); } Думаю, нужно пояснить про несуществование сущности callback, возьмем код: function someFunct() { console.log("Hello world") } function runMe(parameter) { // paremeter - callback ? } runMe(someFunct); function someFunct() { console.log("Hello world") } function runMe(parameter) { console.log(parameter.toString()); // нет, это не callback } runMe(someFunct); function someFunct() { console.log("Hello world") } function runMe(parameter) { parameter(); // О, а это callback :) } runMe(someFunct); как видно из примеров выше, определить, что аргумент функции является callback или не callback можно только после его запуска. Вообще понятие callback это всего лишь такое удобство для понимания, не какая-то специальная конструкция языка. Для окончательного пояснения приведу еще один пример: function someFunct() { console.log("Hello world") } function runMe(parameter) { eval (parameter + '()'); // omg, это тоже callback :) } runMe("someFunct");
Комментариев нет:
Отправить комментарий