返回WinJS.xhr请求结果

时间:2012-06-10 13:41:37

标签: javascript windows winjs microsoft-metro

我正在使用Windows 8 Metro SDK atm,但使用WinJS.xhr遇到了一些麻烦。 如果不是在getData函数中返回WinJS.xhr而是返回一些json对象,一切正常,但我想返回xhr请求生成的json对象。

我在这里尝试有什么问题?谢谢!! :)

(function () {
    "use strict";

function getData() {
    return WinJS.xhr({ url: "http://stackoverflow.com" }).done(
        function (request) {
            var results = [];
            var Item = {
                title: "title",
                text: "some text goes here"
            }
            results.push(Item);
            return results;
        },
        function (request) {
            var results = [];
            results.push({ title: "error", text: "error text" });
            return results;
        }
    );
}

var categoryList = new WinJS.Binding.List(getData());


var publicMembers = { itemList: categoryList };
WinJS.Namespace.define("Data", publicMembers);

})();

1 个答案:

答案 0 :(得分:5)

您将无法使getData函数返回数据本身 - 这是Javascript和Metro中异步操作的本质。

WinJS.xhr函数返回一个WinJS.Promise对象,表示异步操作。您应该将此Promise返回给调用者,调用者可以使用thendone方法注册回调函数,这些函数将在操作完成时得到通知(在Promises的术语中, Promise 已履行)。

因此,getData函数的调用者看起来像这样:

function myFunc() {
    getData().then(function(xhr) {
        // ...do something with the data when it arrives...
    }, function(err) {
        // ...do something with the error
    });
}

请注意,回调是通过XMLHttpRequest对象传递的。

你的getData方法就像这样:

function getData() {
    return WinJS.xhr({ url: "http://stackoverflow.com" })
}