1
所以我想獲得一個循環數組和nodejs的異步性質正在殺死我。這裏是我的代碼:我不能停止異步
\t getDevices(userIDs, function(result) {
\t \t if (result) {
\t \t \t sendNotification(messageUser, messageText, result);
\t \t \t res.send("Success");
\t \t } else {
\t \t \t res.send("ERROR");
\t \t }
\t });
\t
});
function getDevices(userIDs, callback) {
\t var userDevices = [];
\t var device = [];
\t
\t for (var i = 0; i < userIDs.length; i++) {
\t \t \t searchRegisterDevices(userIDs[i], function(result) {
\t \t \t \t if (result) {
\t \t \t \t \t for (var j = 0; j < result.length; j++) {
\t \t \t \t \t \t device = {platform: result[j].platform, token: result[j].token};
\t \t \t \t \t \t userDevices.push(device); \t \t
\t \t \t \t \t }
\t \t \t \t } else {
\t \t \t \t \t console.log("ERROR");
\t \t \t \t }
\t \t \t }); \t
\t }
\t callback(userDevices);
}
function searchRegisterDevices(userID, callback) {
\t MongoClient.connect(url, function(err, db) {
\t \t if (err) {
\t \t \t console.log(err);
\t \t } else {
\t \t \t console.log("We are connected");
\t \t }
\t \t
\t \t var collection = db.collection('RegisteredDevices');
\t \t collection.find({userID: userID}).toArray(function (err, result) {
\t \t \t if (err) {
\t console.log("Error: " + err);
\t } else if (result.length) {
\t \t \t \t callback(result);
\t \t } else {
\t console.log('No document found');
\t }
\t db.close();
\t });
\t });
我首先需要讓我的所有設備從我的MongoDB集合匹配的用戶ID的ID。 SO userIDs是與該集合中的設備綁定的一組ID。一旦我得到設備,我需要從返回的對象中獲取設備標記。
因此: 1)調用getDevices傳遞用戶ID數組 2)調用searchRegisterDevices與設備ID。 3)searchRegisterDevices返回設備數組。 4)從該數組中獲取設備標記並推送到userDevices數組。 5)回userDevices陣列 6)調用sendNotification時與userDevices
我知道我的問題的陣列,我只是我有一個很難解決這些問題
起初我會抱怨說這不起作用。然後它打我。這工作完美。我不敢相信我沒有想到這一點。不是搜索每個設備,而是返回每個ID的每個設備的數組。完善。給予好評! –
@AustinHunter我很高興它爲你提供幫助。 :) – Sachin