У меня есть база данных Firebase, в которой некоторые имена хранятся под некоторыми случайными ключами. У меня есть облачная функция, которая должна взять 1 случайное имя и добавить его к некоторому ключу.
Вот мой код
Promise.all(w_names.names).then((final_names_a) => {
w_names.names = final_names_a;
ref.orderByChild('name').startAt(inp_data.start).limitToFirst(2).on('value', (snapshot) => {
snapshot.forEach((twish) => {
console.log(`Line 129: ${twish.key}`); // <------------ Log
twish.call = false;
resp_pro.push(process_wish_request(twish)); // <------------ Function call
});
Promise.all(resp_pro).then((_v) => {
send_response(res, 200, {val: snapshot.toJSON()});
})
});
});
let process_wish_request = async (snapshot) => {
console.log(`process_with_request: key = ${snapshot.key}`)
if (snapshot.hasChild('allowed') && snapshot.child('allowed').val()) {
snapshot.call = false;
let tmp_resp = {};
tmp_resp = {
id: snapshot.key,
msg: snapshot.child('name').val(),
photo: snapshot.child('photo').val()
};
if (!snapshot.hasChild('options')) {
await generate_options_for_wish(snapshot);
} else {
return Promise.resolve(true);
}
} else {
return Promise.resolve(true);
}
};
let generate_options_for_wish = (snapshot) => {
let rand1 = gen_rand_nums(w_names.names.length);
// let rand2 = gen_rand_nums(w_names.names.length);
while (w_names.names.length > 1 && rand1 === snapshot.key) rand1 = gen_rand_nums();
let rand_names = [
w_names.names[rand1]
];
console.log(snapshot.call);
if (snapshot.call != undefined && snapshot.call == false) {
snapshot.call = true;
return new Promise((res, rej) => {
console.log(`Line 74: ${rand_names.length}`);
db.ref('wishes').child(snapshot.key).child('options').child(rand_names[0].id).set(0).then((_) => {
res(true);
});
})
} else {
}
};
Если я закомментирую этот вызов функции, приведенное выше Журнал печатается 2 раза. Но если я вызываю эту функцию, она вызывается несколько раз. Я понимаю, что это какая-то проблема с асинхронным поведением Promise
. Но как мне заставить его работать?
Предполагается добавить 1 параметр внутри ключа, но это приводит к добавлению более 1.
введите описание изображения здесь
Как заставить работать?