Всякий раз, когда вы находитесь в цепочке Promise, в 99% случаев, когда вы создаете новое Promise (с помощью вызова API или с new Promise
, et c), вы должны вернуть его или иным образом поставить это вместе с чем-то другим (например, Promise.all
и возврат , что ). Это будет означать, что возможные отклонения могут быть обработаны на более высоком уровне, и будет означать, что следующий .then
в цепочке начнется только после завершения предыдущего .then
.
Изменение каждый
Backendless.Data.of(
до
return Backendless.Data.of(
Кроме того, вы, вероятно, не хотите быть catch
на каждом уровне, как вы делаете в настоящее время - всякий раз, когда вы catch
, вы превращаете отклоненное обещание в разрешенное обещание, и последующие .then
могут выполняться при условии, что все в предыдущих .then
завершилось успешно. При таких последовательных асинхронных операциях, если в любом месте есть ошибка , вы, вероятно, захотите остановить весь процесс, а не пытаться продолжить в любом случае (что может привести к ошибкам).
Например, , если Backendless.Data.of('Establishment').save
терпит неудачу, то establishmentObjectId
никогда не назначается, и попытка использовать его позже в финальном .then
не будет работать. То же самое и с specialObjectId
.
Для этого кода есть и лучший шаблон: вместо использования двух отдельных .then
, один для получения establishmentObjectId
и один для получения specialObjectId
, подумайте над тем, чтобы эти операции выполнялись параллельно, и запустите финальный .then
после того, как они будут выполнены через Promise.all
. Что-то вроде:
const getEstablishmentObjectId = () => {
//Get the add form data
// ...
//Create establishment from user's enteries
var establishment = {
// ...
}
//Save establishment to db
return Backendless.Data.of('Establishment').save(establishment)
.then(savedObject => savedObject.objectId);
};
const getSpecialObjectId = () => {
// ...
return Backendless.Data.of('Special').save(special)
.then(savedObject => savedObject.objectId);
};
Promise.all([
getEstablishmentObjectId(),
getSpecialObjectId(),
]).then(([establishmentObjectId, specialObjectId]) => {
console.log(establishmentObjectId);
console.log(specialObjectId);
var parentObject = {
objectId: establishmentObjectId
};
// etc
})
.catch((error) => {
console.log('Error', error);
});