1

为什么我在运行以下代码时收到错误消息“无法获取未定义或空引用的属性‘完成’” ?

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()在 Promise 链中调用一次,并且必须在链的末尾。在有问题的代码中,done()函数在 Promise 链中被调用了两次:

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 () {             
});

当您的代码以两个单独的 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 回答