[英]Performing update operations on Meteor.users collection within catching a rejected promise (using fcm-push+Meteor)
我正在使用名為fcm-push
( https://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
};
}));
這允許我從方法回調的響應參數中獲取status
和response
,因為await
在返回值之前等待promise首先解析。 之后,我可以根據響應執行必要的操作而不會出現任何問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.