[removed] async / await – propagation required the

2019-07-20 06:51发布

问题:

This question already has an answer here:

  • Is it OK to use async/await almost everywhere? 3 answers

I am wrapping a function returning a promises into an async function on a small helper function...

trash(filesArray, {
    glob: false
})
.then(() => {
    resolve(true);
}).catch((err) =>  {
    return err;
})

…because I like to use it synchronous using the await on the next-higher level:

async empty(liveMode, force) {
    …
    await helpers.trashSync(trashFiles);
    // then doing further stuff...
}

Of course, this means, that I need to use the async keyword again... (otherwise I am told await is an ‘unknown reserved’ word or such) and if I am not mistaken, I will now need to use await again on the next-higher level?

await memberSet.empty(true, false)

Does this “game” continue all the way up and throughout my application, so by the end, I have plenty of async/await's wherever there's a tiny async function contained?

Or am I simply missing the point where to stop?

回答1:

You can't convert an async function into a sync function, the purpose of async/await is to allow you to write code that has a similar code path to synchronous calls, but allowing the event loop to be re-entrant and therefore more fine grained. Generator/yield is an alternative approach to interrupting flow of execution.

You'll need to find a point where your call stack naturally expects a returned promise, or doesn't care that it completes asynchronously.