Promise. В чем разница между return resolv() и resol()?

где-нибудь прочитайте этот пример:

return new Promise( (resolve, reject) => {
  fs.readFile(file, (err, data) => {
    if (err) reject(err)
    return resolve(data)
  })
})

но я обычно делаю это:

return new Promise( (resolve, reject) => {
  fs.readFile(file, (err, data) => {
    if (err) reject(err)
    resolve(data)
  })
})

есть ли разница?

Ответ 1

return resolve() просто закончит выполнение функции как обычный return, который просто зависит от потока вашего кода. Если вы не хотите или не нуждаетесь в каком-либо коде для выполнения вашей функции, используйте return для выхода из функции

return new Promise( (resolve, reject) => {
  fs.readFile(file, (err, data) => {
    if (err) reject(err)
    return resolve(data)
    console.log('after return') // won't execute
  })
})

только resolve создаст успешное состояние обещания, но выполнит выполнение кода, если есть, когда return не используется.

Помните resolve() и reject() создать состояние обещания, они не могут быть изменены после создания состояния, обработчики .then и .catch используются для дальнейшего выполнения, использование return полностью зависит от вашего потока кода. Если вы не хотите выполнять больше кода в этом блоке, то return resolve()

return new Promise( (resolve, reject) => {
  fs.readFile(file, (err, data) => {
    if (err) reject(err)
    resolve(data)
    console.log('after return') // will execute
  })
})

он так же, как и нормальный оператор return в function и не имеет ничего общего с обещанием

Ответ 3

Я встретил ошибку кода, и теперь я узнал. разрешить и отклонить просто изменить состояние обещания и повлиять на обещание, но они не изменяют состояние функции, в которой они находятся.

Поэтому, если у вас есть код, который не должен запускаться после разрешения или отклонения, добавьте оператор возврата.