V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
haozhang

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

  •  1
     
  •   haozhang · Jun 11, 2015 · 3743 views
    This topic created in 3985 days ago, the information mentioned may be changed or developed.

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

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

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

    13 replies    2015-06-14 15:34:23 +08:00
    Phariel
        1
    Phariel  
       Jun 11, 2015
    sync or promise
    yangxiongguo
        2
    yangxiongguo  
       Jun 11, 2015
    最暴力的方法 async:false
    clink8001
        3
    clink8001  
       Jun 11, 2015
    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
        4
    yushiro  
       Jun 11, 2015 via iPhone
    把后续代码写在ajax的success的callback里面啊,就不会有问题了。
    sarices
        5
    sarices  
       Jun 11, 2015
    1 改成同步
    2 把console.log放到callback里面
    learnshare
        6
    learnshare  
       Jun 11, 2015
    console.log(results) 应该放在这里:

    }, function (data) {
    results = data;
    ****console.log(results);
    });
    lixia625
        7
    lixia625  
       Jun 11, 2015 via Android
    Promise
    guchengf
        8
    guchengf  
       Jun 11, 2015
    你都说了是“回调”了,人家还没回,你就调了
    shangjiyu
        9
    shangjiyu  
       Jun 11, 2015
    @guchengf +1 呵呵
    w88975
        10
    w88975  
       Jun 11, 2015
    但凡异步的都必须在回调里做操作
    haozhang
        11
    haozhang  
    OP
       Jun 12, 2015
    本来是在写爬虫遇到的问题,大致抽象了出来,我全用async解决了,感谢以上各位的回复🙏。
    holulu
        12
    holulu  
       Jun 12, 2015
    ES 6 的 generator ,局部的同步代码
    mingyun
        13
    mingyun  
       Jun 14, 2015
    @guchengf 哈哈
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1091 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 78ms · UTC 23:30 · PVG 07:30 · LAX 16:30 · JFK 19:30
    ♥ Do have faith in what you're doing.