Javascript 承诺使用后如何清理

Javascript 承诺使用后如何清理,javascript,node.js,promise,Javascript,Node.js,Promise,我有一个创建文件夹的异步函数,我希望能够使用该文件夹进行计算,然后使用相同的函数将其删除 我所尝试的: const t = async () => { let createdFolderPath = '' return new Promise(async (resolve, reject) => { createdFolderPath = await createAFolder() console.log('Folder Created') resolve(crea

我有一个创建文件夹的异步函数,我希望能够使用该文件夹进行计算,然后使用相同的函数将其删除

我所尝试的:

const t = async () => {
 let createdFolderPath = ''

 return new Promise(async (resolve, reject) => {
  createdFolderPath = await createAFolder()
  console.log('Folder Created')
  resolve(createdFolderPath)
 }).finally(async () => {
  await deleteCreatedFolder(createdFolderPath)
  console.log('Deleted Folder')
  })
}

t().then(async (folderpath) => {
  await doSomethingWithFolderThatIsAsync(folderPath)
  console.log('Computation Done')
})
我希望发生的是:

Folder Created
Computation Done
Deleted Folder
实际情况是:

Folder Created
Deleted Folder
Computation Done

我希望
t
函数也删除文件夹,这样使用它的人就不必担心删除文件夹。

我将
传递给
。然后
回调进入
t
,而不是使用
t
返回的承诺。您还应该避免显式承诺构造反模式:

const t = async (thenCallback) => {
  let createdFolderPath = ''

  return createAFolder()
  .then(thenCallback)
  .finally(async () => {
    await deleteCreatedFolder(createdFolderPath)
    console.log('Deleted Folder')
  })
}

t(async (folderpath) => {
  await doSomethingWithFolderThatIsAsync(folderPath)
  console.log('Computation Done')
})
.then(() => {
  // everything finished
});

async
函数总是返回一个
Promise
。在您的代码中使用
Promise
构造函数似乎毫无用处,同时也要避免将Promise链接与
async await
语法混用。这很好,但我希望保留
的正常语法。那么
await
是什么意思?回答中的代码中仍然使用承诺,您可以使用
。然后
等待
任何需要的地方。这是真的,但是我希望清理工作在
完成后进行。然后
完成,而不是之前。我想在
内传递回调。然后
你要找的是不可能的-你不可能有一个承诺有
。然后
在其他地方调用它,并让承诺链的创建者做一些事情。如果返回一个带有自定义
.then
方法的对象,则可以使用
.then
语法,但这是一个可怕的想法。我认为,将中间函数作为回调传递是唯一好的方法。因为这样返回的对象就不是一个标准的承诺,而使用
。那么
处理一些实际上不是承诺的东西会让以后阅读代码的人非常困惑。使用不同的名称,例如
thenIntermediate
,会更有意义,但仅仅传递回调就更有意义了。