2012-08-12 61 views
0

如何異步執行此操作?節點JS - 通過AJAX獲取文件,然後使用數據

var getData, myFunc; 

getData = function() { 
    var data = ""; 
    $.get("http://somewhere.com/data.xml", function(d) { 
    data = $("#selector", d).html(); 
    }); 
    return data; // does not work, because async callback not yet fired 
}; 

myFunc = function() { 
    var data = getData(); 
    // do something with data here 
}; 

我很高興完全重新實現我想要的。我只是不知道什麼樣的設計模式實現了這一點。

回答

1

嗯,你不能。您可以雖然返回一個承諾:

var getData, myFunc; 

getData = function() { 
    var d = $.Deferred(); 
    $.get("http://somewhere.com/data.xml", function (data) { 
     d.resolve($("#selector", data).html()) 
    }); 
    return d.promise(); 
}; 

getData().then(function (data) { 
    alert(data); 
}); 

演示http://jsfiddle.net/W75Kt/2/

+0

ID'getData'意思是'$(的getData)'?否則我不明白'getData.then'會如何工作... – 2012-08-12 20:51:17

+0

@BillyMoon我忘了括號,對此感到抱歉。是的,它會像這樣工作http://jsfiddle.net/W75Kt/2/ – Esailija 2012-08-12 20:53:45

+0

太好了 - 謝謝! – 2012-08-12 21:04:51