Lightswitch html如何知道异步迭代何时完成

时间:2015-02-26 16:35:46

标签: html asynchronous visual-studio-lightswitch winjs-promise

我在另一个异步操作中有一个异步操作。我想知道我什么时候能完成所有工作。

这是我的代码:

msls.showProgress(msls.promiseOperation(function (operation) {
        screen.Staff.getConfirmedWaiters().then(function (result) {
            result.each(function (item) {
                item.getWaiter().then(function (result) {
                    if (result.Gender == "Female") {
                        confirmedGirls++;
                    }
                });
            });
            operation.complete(confirmedGirls);
        });
    }).then(function (result) {

首先我加载ConfirmedWaiters集合。一旦完成,我迭代每个实体并加载子实体异步,所以我想知道迭代何时完成!?但问题是它会立即返回,因为它是异步的,所以我怎么能等到迭代完成然后再调用operation.complete()

1 个答案:

答案 0 :(得分:3)

为了解决此类异步挑战,您需要加入您的承诺。

以下博客文章提供了一些有关promises的背景信息,对于任何LightSwitch HTML客户端开发人员来说都是一个有用的读物​​(总是值得注意的是,LightSwitch HTML主要基于WinJS,任何WinJS承诺相关材料都值得一读) - < / p>

Promises in LightSwitch (Justin Anderson)

All about promises (for Windows Store apps written in JavaScript)

基于第二篇博客文章中介绍的“加入并行承诺”方法,您的代码最终应该与以下内容类似,以达到预期效果(尽管它可能会遇到性别平等异常; - )

msls.showProgress(msls.promiseOperation(function (operation) {
    screen.Staff.getConfirmedWaiters().then(function (result) {
        var ps = [];
        result.each(function (item) {
            var p = item.getWaiter().then(function (result) {
                if (result.Gender == "Female") {
                    confirmedGirls++;
                }
            });
            ps.push(p);
        });
        WinJS.Promise.join(ps).then(function onComplete(result) {
            operation.complete(confirmedGirls);
        }, function onError(error) {
            operation.error(error);
        });
    });
}).then(function (result) {

希望这应该可以解决问题。如果没有,上传示例项目以提供更多背景可能有所帮助。