2017-02-10 1 views
0

У меня возникла ситуация, когда мне нужно обслуживать функцию в служебной папке из моей папки контроллера, и как только я получу вывод, мне нужно передать его обратно в пользовательский интерфейс.Передача данных из одного 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); 
    } 

EDIT после обновления

Ваша служба никогда не вызывая функцию обратного вызова вы объявлены. Примечание: Ваша последняя линия:

return (null, responseFromTwitterService); 

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

return callback(null, responseFromTwitterService); 

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

+0

Спасибо за ответ. Пробовал, но это не сработало :(Я получаю ответ как неопределенный. Можем ли мы передать ответ JSON непосредственно в js-файлах? – Gaurav

+0

Отправьте свой код для этой услуги, пожалуйста, – Paul

+0

Добавлен код службы. хотя как JSON. – Gaurav

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