如何将我的代码从回调函数更改为承诺 [重复]

Posted

技术标签:

【中文标题】如何将我的代码从回调函数更改为承诺 [重复]【英文标题】:How do I change my code from callback function to promise [duplicate] 【发布时间】:2021-12-12 17:24:30 【问题描述】:

我在下面有这样的代码。代码仍然使用回调函数,我想使用 promise 进行更改。我犹豫如何改变它们。能帮忙改一下吗


const fs = require('fs')

fs.readdir('/', (err, result) => 
  if (err) 
    throw new Error(err.message)
  
  console.log(result)
)

【问题讨论】:

【参考方案1】:

fs.readdir('/') 已经被承诺,您需要像您一样使用 chaining 或使用 async/await 内的 IIFE 语法糖来解决它

(async () => 
   try
        const result = await fs.readdir('/');
        console.log(result)
   catch(err)
      console.log(err.message)
   
)();

【讨论】:

这仅适用于您需要正确版本的fs。 -> const fs = require('fs').promises【参考方案2】:

如果您导入位于require('fs').promisesreaddir() 的异步版本,您就可以异步读取目录

const fs = require('fs').promises

const asyncReadDir = async(dirName) => 
    try 
         const dirData = await fs.readdir(dirName)
         console.log("Read successfully")
         // other code here
     catch(error)
         // catch errors
         console.log(error)
    


asyncReadDir("/downloads")

【讨论】:

以上是关于如何将我的代码从回调函数更改为承诺 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在回调结束时获得通知承诺所有回调样式[重复]

如何“承诺”(或回调)此代码

如何更改我的回调函数以承诺?

如何隐瞒回调的承诺? [重复]

即使在承诺时也回调金字塔[重复]

异步 JavaScript - 回调与延迟/承诺 [重复]