Tho*_*ggi 4 javascript asynchronous nonblocking node.js
我对nodejs比较陌生.我最近把我过去几个月收集的所有集体知识汇集到了一个项目中.我相信我遇到了nodejs中的第一个"阻塞"问题.
我有一个页面加载两个request()调用,他们是异步和相应的嵌套.最里面的一个使用来自最里面的数据来重定向用户.
request(parameters,function(error, response, data){
//the first request passes a token
request(newParamters,function(error, response, data){
//the second request passes a url
res.redirect(data.info.url);
});
});
Run Code Online (Sandbox Code Playgroud)
错误是当我在许多浏览器选项卡中打开它时,它会在第一对之后断开,然后服务器说data.info.url是未定义的.
我的问题是:我一次只能执行一个请求吗?我可以保存第一个令牌request()并将用户重定向到第二个request()这会有帮助吗?我一直非常注重异步和不阻塞,我很震惊这种情况正在发生.任何反馈都会很棒!
像这样嵌套会导致许多问题.
我更喜欢这种模式,我将所有内容分解为更容易阅读的命名函数.
当一个函数完成时,它会调用next,依此类推.
parameters = {}; //define parameters
first(parameters); // call first function to kick things off.
var first = function(parameters) {
request(parameters,function(error, response, data){
newParamters = date.something;
second(newParamters, data); //call second function
});
};
var second = function(newParamters, data){
request(newParamters,function(error, response, data){
res.redirect(data.info.url);
});
}
Run Code Online (Sandbox Code Playgroud)
这种模式是"非阻塞的",因此当第一个请求发出时,nodejs进程退出并在接收到响应时继续,然后第二个函数将被调用.
当第二个请求发出时,nodejs进程再次退出.重定向仅在收到响应后发生.