Есть два способа использования обещаний. Либо вы используете обратные вызовы then
/ catch
, либо вы можете использовать async
/ await
, чтобы позволить вам писать их синхронно.
then / catch метод
// Some code before promise
somePromise.then(() => {
// Some code after promise action is successful
}).catch(err => {
// Some code if promise action failed
})
// Some code after promise definition you think should run after the above code
// THIS IS WHAT IS HAPPENING WITH YOUR CODE
метод async / await
// Some code before promise
await somePromise;
// Some code after promise action is successful
Последний подход был введен во избежание проблемы ада обратного вызова , и, похоже, именно здесь возникает ваша ошибка.
При использовании обратного вызова В случае обратных вызовов вы должны убедиться, что ничего не определено после определения обещания, иначе оно будет выполнено за до разрешения обещания (что нелогично, поскольку размещение кода B после кода B должно заставить A работать до B)
Ваша ошибка связана с тем, что ваши обратные вызовы, вероятно, выполняются ПОСЛЕ того, как ответ был отправлен, и express не позволяет отправлять несколько ответов на запрос. Вы должны убедиться, что там, где когда-либо вызывается res.send
или res.json
, существует обратный вызов.
Эта статья должна помочь вам лучше понять обещания ...
Надеюсь, это поможет ...