在嘗試學習如何使用JavaScript Promises時,我嘗試實現一個函數,該函數可以將XHR的結果分配給一個變量。我知道這可能不完全是這種慣用的方式。儘管如此,如果我遇到困惑的問題,這是一件有趣的事情。將變量作爲參數傳遞給函數併爲其分配新值?
這個想法是將XHR包裝在Promise中,並傳遞一個將XHR響應分配給變量的解析函數。以下是一些代碼,並附有說明。一切以測試它在控制檯是在這裏:
function getJSON(url) {
return new Promise(function(resolve, reject) {
var xhr = new XMLHttpRequest();
xhr.open("get", url);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status < 400) {
resolve(xhr.responseText);
}
};
xhr.send();
});
}
function assignDataTo(target, url, ctx) {
// Asynchronously assign JSON response to `target` variable
getJSON(url)
.then(function(data) {
ctx.target = JSON.parse(data);
}, function(error) {
console.log(error);
}
);
}
var targetVariable,
url = "https://data.baltimorecity.gov/resource/n4ma-fj3m.json?$select=*&$limit=5";
assignDataTo(targetVariable, url, window);
valueOf(targetVariable); // Error: undefined
valueOf(window.target); // JSON: xhr.response
添加上下文參數向assignDataTo
是企圖更具體地約可變接收數據的範圍。我發現ctx.target
(或)的計算結果爲window.target
,而不是像我希望的那樣替換函數參數(即ctx.target == window.targetVariable
)。
如何將指針傳遞給我想要分配的實際變量,作爲assignDataTo
函數的參數? (其次,對這個使用承諾進行工作的總體策略的任何意見都是值得歡迎的。)
這:http://en.wikipedia.org/wiki/Evaluation_strategy#Call_by_sharing – zerkms 2014-12-07 08:18:47