Как я могу предотвратить ошибку «Невозможно деструктурировать поле» неопределенного или нулевого значения в этом коде:
const [{ field }, { field2 }] = await Promise.all([asynchronous operations...])
@trincot в Promise.all я выполняю операции с БД, в одном случае промис возвращает объект с этим свойством, а в другом возвращает 'null'. Если бы обещание вернуло «неопределенное», я бы смог использовать значение по умолчанию, но я не могу использовать его с нулевым значением.
Итак, что вы хотите сделать с вашими переменными field (field2), когда соответствующий промис разрешается в undefined или в null?
Вы можете сопоставить null с undefined с помощью Array#map EG. (await Promise.all([...])).map( x => x === null ? undefined : x ), а затем используйте значения по умолчанию.
@Paulpro, это была бы ванильная версия JS моего ответа, которая ускользнула от меня. Вы должны опубликовать это как ответ. :)
Вы можете предоставить запасной вариант следующим образом: const [{ field }, { field2 }] = (await Promise.all([asynchronous operations...]) || [{}, {}])



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вот одно из возможных решений с использованием сторонней библиотеки (async-af).
const input = [Promise.resolve(null), Promise.resolve({field2: 'b'})];
(async () => {
const [{field}, {field2}] = await AsyncAF(input).map(
result => result != null ? result : {field: null, field2: null}
);
console.info(field, field2);
})();<script src = "https://unpkg.com/[email protected]/index.js"></script>В качестве альтернативы, если вы хотел использовать значение по умолчанию:
const input = [Promise.resolve(null), Promise.resolve({field2: 'b'})];
(async () => {
const [{field = 'defaultValue'}, {field2 = 'defaultValue'}] = await AsyncAF(input)
.map(result => result != null ? result : {});
console.info(field, field2);
})();<script src = "https://unpkg.com/[email protected]/index.js"></script>К сожалению, только что понял, что это не покрывает 2-й результат, равный нулю. Придется смотреть дольше. Редактировать: ОК, исправлено.
Убедившись, что обещания разрешаются в объекты с этими свойствами? то есть у первого должно быть свойство
field, а у второгоfield2. В вашем случае одно из обещаний разрешается с помощьюundefinedилиnull. Предотвратить это.