我是nodejs的新人,当然我看到一些指南/截屏要学习一点;但我非常关注异步/同步,读取文件以及nodejs如何处理回调/返回。例如,我无法从此请求查询中返回变量:
function call (method, parameters){
fs.readFile("./cache/session", function(err, data){
var pieces = data.toString().split(),
sessionid = (method != "createsession") ? "/" + pieces[0] : "",
vars = (!parameters) ? "/" + parameters : "",
endpoint = "http://rest.svc/" + method + "json/";
request({ url: endpoint}, function(error, response, body){
if(!error)
return body;
})
})
}
'在论文',我的意思是在javascript上这将完美地工作,但在节点中总是返回undefined
,我在stackoverflow上读到关于此的其他帖子,但没有人澄清我应该如此。
答案 0 :(得分:3)
使用异步函数,如call
要求您将回调参数传递给函数,然后回调的参数是“返回”,因为异步函数将在{{之前'返回(未定义) 1}}回应。
fs.readFile
答案 1 :(得分:1)
在函数" call()"中,启动异步任务。该任务开始后,该功能就会继续。没有别的事可做,所以它返回undefined。
现在,当异步任务调用它的回调时,回调实际上没有任何地方可以返回该值,因此它被丢弃。
要解决这个问题,你需要使用一种名为Futures或Promises的东西。我以前从未使用过这些,但他们的工作方式如下:
function call (method, parameters){
var future = new Future();
fs.readFile("./cache/session", function(err, data){
var pieces = data.toString().split(),
sessionid = (method != "createsession") ? "/" + pieces[0] : "",
vars = (!parameters) ? "/" + parameters : "",
endpoint = "http://rest.svc/" + method + "json/";
request({ url: endpoint}, function(error, response, body){
if(!error)
future.return(body);
else
future.throw(error);
});
});
return future.wait();
};