В этом случае, я думаю, что jsLint просто вводит вас в заблуждение в более сложный код Иногда вы получаете это из linter, и лучший вариант в этом случае - обойти linter для определенной строки кода или функции или определенного правила linter.
Это самая простая и понятная реализация вашего кода, о которой я могу подумать (которая должна быть вашим приоритетом):
function deleteUIDsFromDBForKey(rootkey, users_uids) {
return retrieveUIDsFromDBForKey(rootkey).then(uids => {
const diff = uids.diff(users_uids);
// wait for all deletes to be done, then return diff
return Promise.all(diff.map(key => {
return firebase.database().ref(rootkey + "/" + key).remove();
})).then(() => diff);
});
}
Или, используя Bluebird's .map()
, вы можете сделать это:
// using Bluebird's Promise.map()
function deleteUIDsFromDBForKey(rootkey, users_uids) {
return retrieveUIDsFromDBForKey(rootkey).then(uids => {
const diff = uids.diff(users_uids);
// wait for all deletes to be done, then return diff
return Promise.map(diff, key => {
return firebase.database().ref(rootkey + "/" + key).remove();
}).then(() => diff);
});
}
Или, используя async / await:
async function deleteUIDsFromDBForKey(rootkey, users_uids) {
const uids = await retrieveUIDsFromDBForKey(rootkey);
const diff = uids.diff(users_uids);
await Promise.all(diff.map(key => {
return firebase.database().ref(rootkey + "/" + key).remove();
}));
return diff;
}
У меня не установлен jsLint с поддержкой ES7, но последний вариант должен избегать предупреждения о вложенности. Первые два, вероятно, нет, но попытка избежать этого предупреждения только ухудшит код, поэтому, IMO, вам следует просто отключить предупреждение.