2017-02-20 7 views
6

где-то читали этот пример:Обещание. Что влияет тип возвращаемой решимости() и решимость()

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) 
    }) 
}) 

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

+2

Здесь не будет иметь значения. – elclanrs

+0

Я думаю, что в первом случае вы можете цепью, но во втором случае вы не можете –

ответ

11

return resolve()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 и не имеет ничего общего с обещанием

+0

Было бы полезно показать, как они реагируют, когда создается состояние '.then', т.е. один будет терпеть неудачу, один не будет , – brandonscript

0

Это не делает сделайте это здесь, но если вы хотите сделать что-то после решения, см., например, примеры в нижней части страницы MDN: https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Promise/resolve

+0

Лучше всего включить соответствующие части ссылки в свой ответ – brandonscript