我正在尝试编写Koa中间件,如果条件满足,请转到下一个中间件。如果条件未满足,请短路流体。我发现了两种方式,使用Promise或async / await。
方法1:基于承诺
app.use(function(ctx, next){
// if condition met
if (conditionMet){
ctx.somedata = 'bar';
// go to next middleware
return next();
}
})
方法2:异步/等待
app.use(async function(ctx, next){
// if condition met
if (conditionMet){
ctx.somedata = 'bar';
// go to next middleware
await next();
}
})
这两种方法之间有什么区别吗?如果没有,则首选哪一个?
最佳答案
当await next()
之后没有代码时,您将获得相同的结果。正如ippi在评论中提到的那样,当以后拥有代码时,withwait将只是“干净”的,因为它将等待,直到诺言解决后再转到下一行,而在“通用诺言方式”中,您将不得不处理解决方案的承诺。在您的特定示例中,这无关紧要,但是可能在代码的其他部分中,您将使用一个或另一个(也许是在另一个中间件中?),并且您将希望使代码同质。
万一您以后会有什么事情,可以这样进行(可能您已经知道):
异步功能(节点v7.6 +)
app.use(async (ctx, next) => {
// if condition met
if (conditionMet){
ctx.somedata = 'bar';
// go to next middleware
await next();
// after code
console.log('this will be executed after promise next() is resolved');
}
});
常用功能
app.use((ctx, next) => {
// if condition met
if (conditionMet){
ctx.somedata = 'bar';
// go to next middleware
return next().then(() => {
// after code
console.log('this will be executed after promise next() is resolved');
});
}
});
我不能说有更好的一个,它们只是不同。对我而言,async / await看起来比较轻松,我个人可以更好地控制代码流,避免Promises Hell。我认为它们正在变得越来越强大,并受到新的javascript标准的支持,但是对于开始使用js进行编码的人来说,原始的诺言看起来会更好。
关于javascript - koa:promise vs async等待中间件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50892664/