1

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

})();
4

1 回答 1

5

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

WinJS.xhr函数返回一个WinJS.Promise对象,该对象代表一个异步操作。你应该把它返回Promise给你的调用者,调用者可以使用thenordone方法注册回调函数,当操作完成时(在 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" })
}
于 2012-06-10T21:27:52.980 回答