Зачем Promise.resolve потерял значение внутри асинхронной функции? - PullRequest
0 голосов
/ 12 ноября 2018

Я знаю, что когда мы используем обещание в JavaScript, мы обычно используем два способа, как показано ниже.

var f1 = () => {
  return new Promise( (resolve, reject) => {
    resolve(10);
  })
}

var f2 = () => {
  return Promise.resolve(10)
}

f1().then( data => { console.log(data) })  // 10
f2().then( data => { console.log(data) })  // 10

Но если я использую асинхронную функцию внутри обещания, Promise.resolve теряет значение, как показано ниже.

const fs = require('fs')

var f1 = () => {
  return new Promise( (resolve, reject) => {
    fs.readFile('data.txt', (err, data) => {
      resolve(data);
    })
  })
}

var f2 = () => {
  return Promise.resolve()
  .then(() => {
    fs.readFile('data.txt', (err, data) => {
      //return data              --> undefined
      //Promise.resolve(data)    --> undefined
      return Promise.resolve()   --> undefined
    })
  })
}

f1().then( data => { console.log('1,',data) })
f2().then( data => { console.log('2,',data) })

Я думаю, что я неправильно использую Promise.resolve ,,, ИЛИ Promise.resolve не поддерживает асинхронную функцию ... кто-то скажет мне, почему Promose.resolve не работает ..

1 Ответ

0 голосов
/ 12 ноября 2018

Если у вас есть значение, с которым вы хотите немедленно разрешить обещание, вы можете использовать Promise.resolve().

Если вы получите значение в асинхронном режиме в обратном вызове, вы должны использовать конструктор new Promise с обратными вызовами resolve / reject, и пути назад нет.

...