Передача данных из одного файла JS в другой синхронно в NodeJS

У меня есть ситуация, когда мне нужно обслуживать функцию в служебной папке из папки моего контроллера, и как только я получаю вывод, мне нужно передать его обратно в пользовательский интерфейс.

    //controller
    var service = require('service');
    api.get('/users', function(request, response) {
        var name = request.query['name'];
        var responseFromService = service.someAPI(name);
        response.send(responseFromService).status(200);
    });
    //Service


       exports.callTwitterAPI = function(twitterHandle,callback){
    var responseFromTwitterService;

    console.log("Calling Twitter API.." + twitterHandle);
    someAPI.get('users/show', {screen_name: twitterHandle}, function (err, data, res) {
        if (err) {
            //loggerError.error('No connection to twitter :', Date.now());
            responseFromTwitterService = JSON.stringify(err) + "Unable to connect twitter";
        } else if (data.errors) {
            responseFromTwitterService ="User Not Found!!"
           // loggerInfo.info('No Twitter handle found for :', twitterHandle);
        } else {
            console.log("here..");
            responseFromTwitterService = data;
        }
        console.log('response : '+ responseFromTwitterService);
        return (null,responseFromTwitterService);
    });
}

Теперь мне нужно провести казнь

response.send(responseFromService).status(200);

до тех пор, пока мой сервис не вернет ответ, мне нужно сделать его синхронным.

Заранее спасибо:)

1 ответ

Решение

Ваш сервис будет либо синхронным по своей природе, либо асинхронным по своей природе, и то, как вы справитесь с этим, будет зависеть от этого.

Если вызов службы синхронный, то написанное вами будет работать нормально. Если он асинхронный, то вам просто нужно отправить свой ответ в обратном вызове, например:

//controller
    var service = require('service');
    api.get('/users', function(request, response) {
        var name = request.query['name'];
        var responseFromService = service.someAPI(name, function(err, responseFromService) {
            response.send(responseFromService).status(200);
        });
    });
    //Service
    exports.someAPI = function(name, callback){
    //some calculations
    return callback(null, responseFromService);
    }

РЕДАКТИРОВАТЬ после вашего обновления

Ваш сервис никогда не вызывает обратный вызов, который вы объявили. Обратите внимание на вашу последнюю строку:

return (null, responseFromTwitterService);

На самом деле ничего не делает. Вместо этого вы хотите:

return callback(null, responseFromTwitterService);

И тогда ваш вызывающий код в контроллере может быть записан так, как я предложил.

Другие вопросы по тегам