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
,会更有意义,但仅仅传递回调就更有意义了。