正在从内部回调中分配变量
Assing variable from inner callback
老实说,这个问题没有重复,因为我知道如何使用回调来修复它,正如链接问题中所解释的那样,这个问题是关于我无法修改outer函数的情况,而这在另一个问题中没有涉及
我使用了一个我不能修改的库,该库做了这样的事情:
var result = Foo()
然后使用CCD_ 2进行工作。我不能修改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中为库要求什么,或者强制请求同步的方法
这就是处理同步请求的方法:
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
,则修改它以同步发送请求。
您试图做的事情本身是不可能的,一旦代码是异步的,就不能像同步代码那样使用它。这就是为什么回调地狱是一件事。
您可以尝试分析模块内部并对其进行猴子补丁,但这可能不可能,具体取决于模块公开的导出内容。
相关文章:
- 在运行时使用预先确定的对象分配变量
- 重新分配变量和重新定义之间的性能差异
- Javascript:在对象中分配变量时命名函数的好处
- Angularjs 控制器在服务方法返回之前从服务中分配变量
- 在 JavaScript 中的 for 循环中重新分配变量的目的是什么?
- 按设置的数量拆分字符串,并为拆分分配变量
- 嵌套的 if/else 语句讨论了分配变量.我已经这样做了,但它仍然不起作用
- 有没有理由不在 while 块声明中分配变量
- JSON - 访问 JSON 数组并分配变量
- Angular2 火力基地检索并分配变量
- 是否可以在运行依赖项之前在 gulp 任务中分配变量
- 在 JS 中的 for 循环中重新分配变量是什么意思
- 使用多种组合分配变量的最佳方法是什么
- 使用函数从字符串中分配变量名称
- 如何调用chrome.storage.sync.get并在页面加载时分配变量
- 在JavaScript中用冒号分配变量的语法有效吗
- 带有单选按钮的If语句不分配变量
- 正在从内部回调中分配变量
- Javascript在匿名函数中分配变量的值
- 使用jQuery分配变量类型时出错