我诚实地认为这个问题没有重复,因为我知道如何使用回调修复它作为链接问题中的解释,这个问题具体是关于我无法修改outfer函数的情况,这不是另一个问题涉及
我使用的是无法修改的库,库可以这样做:
var result = Foo()
然后它使用result
进行工作。我无法修改result
的工作方式,我只能修改Foo
,因为我将其作为参数传递给库。
如果foo
有类似的内容
funcion Foo(){
return "Hello"
}
它完美无缺。结果为Hello
并且有效。
问题是我的Foo
内部有异步调用。它调用Web服务器,然后它应该返回服务器的响应。所以
funcion Foo(){
request.get('http://server.com', function(error, response, body){
var parsed = JSON.parse(body);
return parsed.Hello;
});
}
在这种情况下var result = Foo();
,result
不包含服务器的响应(因为是异步)并继续显示空结果。
所以,如果我只能修改Foo
我该怎么办?
更新:如果你发现它不可能我会喜欢听到替代方案,例如我应该在PR中为图书馆询问什么,或者强迫请求同步的方式
答案 0 :(得分:1)
这是您使用同步请求的方法:
funcion Foo(){
var request = new XMLHttpRequest();
request.open("GET", "http://server.com", false);
request.send();
function handleResponse(response) {
console.log(response);
}
handleResponse(request.responseText);
}
如果您只能修改Foo
,请修改它以同步发送请求。
答案 1 :(得分:0)
您尝试做的事情本身是不可能的,一旦代码是异步的,就不能像使用同步代码那样使用它。这就是callback hell为什么的原因。
您可以尝试分析模块内部和monkey patch,但这可能无法实现,具体取决于模块公开的导出。