【问题标题】:Use javascript promises in ios ionic app在 ios 离子应用程序中使用 javascript 承诺
【发布时间】:2016-12-01 18:44:46
【问题描述】:

我需要在 ionic 中使用以下承诺(ios 显然在 android 上没问题):

var Attendees = Parse.Object.extend("Attendees");

    return Promise.all(eventDetails.map(detail => {
        return Promise.all([new Promise((res, rej) => {
            var query2 = new Parse.Query(Attendees);
            query2.equalTo("event_id", detail .id_event);    
            query2.count({
                success: function(number) {
                    detail["n_requests_received"] =  number;
                    alert("received")
                    res('Some value if required'); //These are needed or promise chain will hang
                }
            });
        }),
        new Promise((res, rej) => {
            var query3 = new Parse.Query(Attendees);
            query3.equalTo("event_id", detail .id_event);
            query3.equalTo("status", "confirmed")
            query3.count({
                success: function(number) {
                    detail["n_requests_confirmed"] =  number;
                   // alert("confirmed")
                   res('Some value if required'); //These are needed or promise chain will hang
                }
            });
        })]);
    }));

你知道怎么做吗?

【问题讨论】:

    标签: javascript ios angularjs ionic-framework promise


    【解决方案1】:

    我使用 deferred 是为了让你可以运行一个 Promise 链,而不是将它们分开。如果调用发生错误,您还需要处理错误情况(两个 Promise 使用相同的错误函数)。它会正确地拒绝承诺,以便您妥善处理。

    var promises = [];
    
    eventDetails.forEach(function(detail) {
        var deferred = $q.defer();
    
        new Parse.Query('Attendees')
        .equalTo("event_id", detail.id_event) 
        .count().then(function(number) {
            detail["n_requests_received"] =  number;
            alert("received");
            return new Parse.Query('Attendees')
            .equalTo("event_id", detail .id_event)
            .equalTo("status", "confirmed")
            .count();
        }).then(function(confirmedCount) {
            detail["n_requests_confirmed"] = confirmedCount;
            deferred.resolve('I have resolved this promise');
        }, function(err) {
            console.error(JSON.stringify(err));
            deferred.reject('Error: ' + JSON.stringify(err));
        });
    
        promises.push(deferred.promise());
    });
    
    $q.all(promises).then(function(res) {
        // completed all promises w/ no errors
    }, function(err) {
        console.error(JSON.stringify(err));
    });
    

    【讨论】:

    • 不工作。我认为 => 是 ES6 符号,因此在 ionic 中无法识别。您知道如何将第一行中的 =
    • 编辑了我的答案。我以为你在 Ionic 和使用 ES7 中有点工作。它不使用这样的常规承诺,你必须使用 $q Angular 风格的承诺。
    猜你喜欢
    • 2021-03-13
    • 1970-01-01
    • 1970-01-01
    • 2018-03-01
    • 2013-11-29
    • 1970-01-01
    • 2018-01-29
    • 1970-01-01
    • 2018-06-20
    相关资源
    最近更新 更多