在 js 中使用回调如何保证数据的同步获得。

2015-06-11 20:39:27 +08:00
 haozhang

不太会表达。我还是直接贴代码
```javascript
var results = "";

request({
method: "GET"
url: "www.xxx.com"
}, function (data) {
results = data;
});

console.log(results) // 这里因为回调的原因总是空的。
```
有什么方法保证回调之后数据能同步...

3059 次点击
所在节点    JavaScript
13 条回复
Phariel
2015-06-11 20:49:37 +08:00
sync or promise
yangxiongguo
2015-06-11 20:49:53 +08:00
最暴力的方法 async:false
clink8001
2015-06-11 20:54:58 +08:00
var XmlHttp;
XmlHttp = new ActiveXObject("Msxml2.XMLHTTP.3.0");

function send() {
XmlHttp.onreadystatechange = doHttpReadyStateChange;
XmlHttp.open("GET", "http://localhost/sample.xml", true);
XmlHttp.send();
}

function doHttpReadyStateChange() {
if (XmlHttp.readyState == 4) {
alert("Done");
}
}

楼主,当 XmlHttp.readyState 的值为4的时候,数据才会返回。你直接调用有可能数据还没返回。
yushiro
2015-06-11 21:13:27 +08:00
把后续代码写在ajax的success的callback里面啊,就不会有问题了。
sarices
2015-06-11 21:39:46 +08:00
1 改成同步
2 把console.log放到callback里面
learnshare
2015-06-11 21:39:54 +08:00
console.log(results) 应该放在这里:

}, function (data) {
results = data;
****console.log(results);
});
lixia625
2015-06-11 21:50:00 +08:00
Promise
guchengf
2015-06-11 22:09:49 +08:00
你都说了是“回调”了,人家还没回,你就调了
shangjiyu
2015-06-11 22:25:33 +08:00
@guchengf +1 呵呵
w88975
2015-06-11 23:42:53 +08:00
但凡异步的都必须在回调里做操作
haozhang
2015-06-12 01:23:51 +08:00
本来是在写爬虫遇到的问题,大致抽象了出来,我全用async解决了,感谢以上各位的回复🙏。
holulu
2015-06-12 07:55:22 +08:00
ES 6 的 generator ,局部的同步代码
mingyun
2015-06-14 15:34:23 +08:00
@guchengf 哈哈

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/197849

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX