我用 Durandal/Breeze/Knockout 开发了一个应用程序。
在我的 javascript 中,我想一个接一个地执行 2 个异步操作。
首先是收集我所有的“警报”,其中 transportId 通过参数传递,类别为“全局”
第二个是删除上面收集的所有这些实体
这是我到目前为止所做的:
var checkAlarmsOnTransport = function (id) {
    var alarms = ko.observableArray();
    getAlarms(alarms, id, 'Global')
        .then(deleteAlarms(alarms));
};
var getAlarms = function (alarmsObservable, transportId, category, forceRemote) {
    // Input: transportId
    // Input: category
    // Input: forceRemote: boolean to force the fetch from server
    // Output: alarmsObservable: an observable filled with all the alarms
    if (forceRemote)
        queryCacheAlarms = {};
    var p1 = new Predicate('transportId', '==', transportId);
    var p2 = new Predicate('category', '==', category);
    var query = entityQuery.from('Alarms')
                           .orderBy('id')
                           .where(p1.and(p2));
    var isInCache = (queryCacheAlarms === true);
    if (isInCache && !forceRemote) {
        query = query.using(breeze.FetchStrategy.FromLocalCache);
    } else {
        queryCacheAlarms = true;
        query = query.using(breeze.FetchStrategy.FromServer);
    }
    //old return manager.executeQuery(query)
    //old    .then(querySucceeded)
    //old    .fail(queryFailed);
    var p = manager.executeQuery(query);
    p.then(querySucceeded);
    p.fail(queryFailed);
    return p;
    function querySucceeded(data) {
        console.log("the get return:" + data.results.length); // <---------- added
        alarmsObservable(data.results);
    }
};
var deleteAlarms = function (alarmsObservable) {
    // Input: alarmsObservable: an observable filled with a list of alarms to delete
    // Output: none
    console.log("deleted:" + alarmsObservable().length); // <------------- added
    for (var i = alarmsObservable().length - 1; i >= 0 ; i--) {
        alarmsObservable()[i].entityAspect.setDeleted();
    };
};
我成功地独立成功地测试了这两个功能。现在我想异步使用它,但它不起作用。
任何想法?
感谢任何人指出我正确的方向。
更新
我像 CodeThug 建议的那样更新了我的代码,然后我console.log在我的 2 个函数中添加了 2 行来跟踪所做的事情。看上面。
控制台显示:
已删除:0
得到回报:6
因此,似乎该deleteAlarms函数在 the 之前被调用getAlarms,因此deleteAlarms收到了 0 个元素的输入。
知道为什么电话被颠倒了吗?