javascript - 在 NodeJS 中将数据从一个 js 文件同步传递到另一个文件

标签 javascript node.js asynchronous-javascript

我遇到一种情况,我需要从 Controller 文件夹中的服务文件夹中提供服务功能,一旦收到输出,我需要将其传递回 UI。

    //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);

在我的服务返回响应之前,我需要使其同步。

提前致谢:)

最佳答案

您的服务要么本质上是同步的,要么本质上是异步的,并且您如何处理它将取决于此。

如果服务调用是同步的,那么您编写的内容就可以正常工作。如果它是异步的,那么您只需在其回调中发送响应,例如:

//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);

然后你可以按照我的建议编写 Controller 中的调用代码。

关于javascript - 在 NodeJS 中将数据从一个 js 文件同步传递到另一个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42151332/

相关文章:

javascript - 只有第一个复选框值被添加到我的表中

javascript:图像不会改变

javascript - 将鼠标悬停/单击 DIV 列表

javascript - 如何循环遍历 JavaScript 对象但不对特定键执行操作?

node.js - Socket.io 多个响应而不是一个

node.js - Nodejs + Mongodb : find data after aggregation

ajax - 从客户端调用服务器端 REST 函数

javascript - 在 Node.js 重新启动期间保留 setTimeout 和 setInterval

node.js - 如何使用 mocha chai 测试异步服务器代码?

javascript - 如何正确处理父异步调用中的一系列异步调用