1

次のコードを実行すると、「未定義またはnull参照のプロパティ'done'を取得できません」というエラーメッセージが表示されるのはなぜですか?

new WinJS.Promise(initFunc).then(function () {
                       /* do something that returns a promise */
}).done(function () {
                       /* do something that returns a promise */
}).then(function () {
                       /* do something that returns a promise */
}).done(function () {
});
4

2 に答える 2

1

約束のチェーンで呼び出すことができるのはdone()1回だけであり、それはチェーンの最後にある必要があります。問題のあるコードでは、done()関数はPromiseチェーンで2回呼び出されます。

new WinJS.Promise(initFunc).then(function () {
}).done(function () {     <====== done() is incorrectly called here--should be then()
}).then(function () {     <====== the call to then() here will throw an error
}).done(function () {             
});

この問題のシナリオは、コードが2つの別々のpromiseチェーンで始まり、後で次のようにそれらを組み合わせてしまう場合に発生する可能性があります。

new WinJS.Promise(initFunc).then(function () {
                       /* do something that returns a promise */
}).done(function () {     <====== change this done() to a then() if you combine the two
});                               promise chains

new WinJS.Promise(initFunc).then(function () {
                       /* do something that returns a promise */
}).done(function () {
});
于 2012-12-14T19:50:18.273 に答える
0

単純に同じエラーが発生します。

new WinJS.Promise(initFunc).then(function () {
}).done(function () {
});

のコードは、then呼び出す約束を返さなかったためdoneです。

new WinJS.Promise(initFunc).then(function () {
    // Return a promise in here
    // Ex.:
    return WinJS.Promise.timeout(1000);
}).done(function () {
});

そして、最初のコードに戻るには、回答で述べたように、複数をつなぎ合わせてはいけませんdone

于 2012-12-14T20:04:59.520 に答える