无法获取未定义或空引用的属性“已完成”

时间:2012-12-14 19:50:18

标签: windows-8 winjs

当我运行以下代码时,为什么会收到错误消息“无法获取未定义或空引用的属性”

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

2 个答案:

答案 0 :(得分:1)

您只能在承诺链中调用done()一次,并且必须位于链的末尾。在有问题的代码中,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 () {             
});

当您的代码以两个单独的承诺链开始并且您最终在稍后将它们组合在一起时,可能会发生此问题场景,如下所示:

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

答案 1 :(得分: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链接在一起。