簡體   English   中英

在捕獲被拒絕的承諾中對Meteor.users集合執行更新操作(使用fcm-push + Meteor)

[英]Performing update operations on Meteor.users collection within catching a rejected promise (using fcm-push+Meteor)

我正在使用名為fcm-pushhttps://www.npmjs.com/package/fcm-push )的NPM軟件包,以便根據生成的消息向各種移動設備發送FCM通知。 FCM消息成功發送時沒有問題,但是如果FCM消息發送因與消息關聯的FCM令牌“NotRegistered”而失敗,那么我想刪除與該用戶關聯的FCM令牌。

但是,每當FCM消息無法發送時,令牌永遠不會從用戶的配置文件中刪除,即使它在調用Meteor.users.update時觸發了Meteor.users.update 如果有任何方法可以修改數據庫操作,以便我可以在配置文件上成功執行更新操作,那么我們將不勝感激。

[INFO] -- 10:59:23 | "Error" | Data: {
  "data": "NotRegistered",
  "haltDate": "2017-03-31T10:59:23.660Z"
}  | User: cHkDSqQBMVc:APA91bFXCwp1-nxi2xxVEZARAMHs48kLm6FN0tbgmjv1lP1-LsBty_6gCFqGqDxGV9JrpCDG9pVFIxUz-77-6QxbIMa2OWmG4xoN2-E_8UoD_xe8MVoDb-DZY_KSZcMh4Bg_5F18ltg0

    return fcm.send(fcmMessage).then((data) => {
        var processEndDate = new Date();
        console.log("Response Data "+data+" ------ "+startDate+" --> "+processEndDate);
        loggerA.info("Response", {data: data, startDate: startDate, endDate: processEndDate}, token);
        return {
            method: 'SendMessage',
            status: JobberServer.Status.SUCCESS,
            dateEnd: processEndDate,
            response: data
        };
    }).catch((err) => {
        loggerA.info("Error", {data: err, haltDate: startDate}, token);
        Meteor.users.update({_id: targetId}, {$pull: {"profile.fcmTokens": {id: token}}}, {multi: true}, function (err, docsModified) {
            loggerA.info("Deregister Op", {token: token, res: err, noOfDereggedTokens: docsModified}, "NAN");
        });
        return {
            method: 'SendMessage',
            status: JobberServer.Status.FAIL,
            dateEnd: null,
            response: err
        }
    });

結束修復它 - 只需要從方法本身刪除更新操作,使用Promise.await(...)包裝promise,然后返回它的返回值,以便Meteor.call(...)可以使用它Meteor.call(...)回調。 方法中生成的代碼如下所示:

    return Promise.await(fcm.send(fcmMessage).then((data) => {
        var processEndDate = new Date();
        console.log("Response Data "+data+" ------ "+startDate+" --> "+processEndDate);
        loggerA.info("Response", {data: data, startDate: startDate, endDate: processEndDate}, token);
        return {
            status: JobberServer.Status.SUCCESS,
            response: data
        };
    }).catch((err) => {
        loggerA.info("Error", {data: err, haltDate: startDate}, token);
        return {
            status: JobberServer.Status.FAIL,
            response: err
        };
    }));

這允許我從方法回調的響應參數中獲取statusresponse ,因為await在返回值之前等待promise首先解析。 之后,我可以根據響應執行必要的操作而不會出現任何問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM