返回WinJS.xhr请求结果

aho*_*eth 1 javascript windows microsoft-metro winjs

我正在使用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);

})();
Run Code Online (Sandbox Code Playgroud)

Ada*_*man 5

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

WinJS.xhr函数返回一个WinJS.Promise对象,该对象表示异步操作.你应该回到这个Promise给你的来电者,谁可以使用thendone方法来注册回调函数将被通知当操作完成(在承诺的术语,当Promise满足).

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

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

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

你的getData方法变成这样:

function getData() {
    return WinJS.xhr({ url: "http://stackoverflow.com" })
}
Run Code Online (Sandbox Code Playgroud)