pcwu's TIL Notes


[JS] Callback to Promise

很多函式都是使用 callback 來運作的,其實可以透過改寫成 Promise 來讓它變得更方便使用:

例如常用的到的 setTimeout

const sleep = (delay = 0) => (
    new Promise((resolve) => {
        setTimeout(resolve, delay)
    })
)

sleep(3000)
  .then(() => getUniqueCommentAuthors())
  .then((uniqueAuthors) => { this.setState({uniqueAuthors}) })

或者讀檔,改寫成 Promise 也同時可以將錯誤處理寫進去:

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

readFile('path/to/file')
  .then((data) => console.log('Here is the data', data))
  .catch((ex) => console.error('Arg!', ex))

覺得是個滿簡單好用的小技巧

Reference