Так что я пытаюсь получить массив с циклом, и асинхронный характер 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 в UserIds. SO userID - это массив идентификаторов, привязанных к устройствам в коллекции. Как только я получу устройство, мне нужно получить токен устройства из возвращаемого объекта.
So: 1) вызов getDevices, передающий массив идентификаторов пользователя 2) вызов searchRegisterDevices с идентификатором устройства. 3) searchRegisterDevices возвращает массив устройств. 4) получить маркер устройства из этого массива и нажать массив userDevices. 5) возвращение userDevices массива 6) называют sendNotification с массивом userDevices
Я знаю, что мои вопросы, я просто я с трудом решая их
Сначала я собирался жаловаться, сказав, что это не сработает. Тогда это ударило меня. ЭТО РАБОТЫ СОВЕРШЕННЫ. Не могу поверить, что я об этом не думал. Вместо поиска для каждого устройства это возвращает массив каждого устройства каждого идентификатора. Отлично. Upvote! –
@AustinHunter Я рад, что это вам помогло. :) – Sachin