我对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);
});
});
错误是当我在许多浏览器标签中打开它时,它在第一对夫妇之后就会中断,然后服务器说data.info.url
未定义。
我的问题是:我是否应该一次只执行一个请求?我可以保存第一个request()
的令牌并将用户重定向到第二个{{1}这会有帮助吗?我一直非常注重异步和不阻塞,我很震惊这种情况正在发生。任何反馈都会很棒!
答案 0 :(得分:6)
这样嵌套会导致很多问题。
我更喜欢这种模式,我将所有内容分解为更容易阅读的命名函数。
当一个函数完成时,它会调用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);
});
}
这种模式是“非阻塞的”,因此当第一个请求发出时,nodejs进程退出并在接收到响应时继续,然后第二个函数将被调用。
当第二个请求发出时,nodejs进程再次退出。 重定向仅在收到响应后才会发生。