【发布时间】:2019-07-25 20:15:52
【问题描述】:
所以我正在使用 websockets 来处理来自网站 API 的数据。对于每个新事件,我还会将一些 http 请求发送回网站以获取更多数据。到目前为止,一切都运行良好,但现在我开始使用异步请求来加速它,事情变得有点不同。我的代码用于处理一个事件,然后继续处理下一个事件(这些事件来得非常快——大约每秒 10 个)但现在它似乎忽略了异步(非阻塞)部分并继续进行下一个事件和这样它就跳过了一半以上的代码。请注意,代码在 Pusher 之外运行良好。我正在使用“推送客户端”模块。我的代码如下所示:
var Request = require("request");
var requestSync = require('sync-request');
var Pusher = require('pusher-client');
var events_channel = pusher.subscribe('inventory_changes');
events_channel1.bind('listed', function(data)
{
var var2;
//Async request (to speed up the code)
function myFunction(callback){
request("url", function(error, response, body) {
if (!error && response.statusCode == 200)
{
result = JSON.stringify(JSON.parse(body));
return callback(null, result);
}
else
{
return callback(error, null);
}
});
}
myFunction(function(err, data){
if(!err)
{
var2 = data
return(data);
}
else
{
return(err);
}
});
//The part of the code below waits for the callback and the executes some code
var var1 = var2;
check();
function check()
{
if(var2 === var1)
{
setTimeout(check, 10);
return;
}
var1 = var2;
//A CHUNK OF CODE EXECUTES HERE (connected to the data from the callback)
}
});
总而言之,代码可以工作,但由于推送器跳过异步请求,所以不能在推送器内部。在处理下一个事件之前,我如何让推送器等待我的异步请求完成(我不知道)?如果你碰巧知道,请告诉我:)
【问题讨论】:
标签: node.js websocket callback pusher