アプリに最も明確なコードを組み込みたい。そこで、xhr の呼び出しと解析を view.js から分離することにしました。そうするために私は追加しました:
View.js で
this._pagePromises.push(myapp.Services.Foo.getFoo()
.then(
function success(results) {
var x = results;
},
function error() {
// TODO - handle the error.
}
));
そしてServices.jsで
Foo:
{
getFoo: function () {
WinJS.xhr({ url: "http://sampleurl.com" }).done(
function completed(request) {
//parse request
var obj = myapp.Parser.parse(request);
return obj;
},
function error(request) {
// handle error conditions.
}
);
}
}
しかし、私はこの例外があります:
0x800a138f - JavaScript ランタイム エラー: 未定義または null 参照のプロパティ 'then' を取得できません
私が欲しいのは: view.js で約束を開始し、getFoo() が完了したときにビューを更新します。私はこれを正しい方法で行っていませんが、C# 開発者として、このパターンを理解するのにいくつかの困難があります。
編集:私の更新されたコードがあります:
getFoo: function () {
var promise = WinJS.xhr({ url: myapp.WebServices.getfooUrl() });
promise.done(
function completed(request) {
var xmlElements = request.responseXML;
var parser = new myapp.Parser.foo();
var items = parser.parse(xmlElements);
return items;
},
function error(request) {
// handle error conditions.
}
);
return promise;
}
「その後」に関する私の問題は解決しましたが、「返品の約束」は「返品アイテム」の前に呼び出されます。したがって、私の「呼び出し元」は約束を受け取るだけで、結果は受け取りません。
私は何を取りこぼしたか ?
編集2:これを行う正しい方法があります:
Foo:
{
getFooAsync: function () {
return WinJS.Promise.wrap(this.getXmlFooAsync().then(
function completed(request) {
var xmlElements = request.responseXML;
var parser = new myapp.Parser.Foo();
var items = parser.parse(xmlElements);
return items;
}
));
},
getXmlFooAsync: function () {
return WinJS.xhr({ url: "http://sampleurl.com" });
}
}