2017-04-07 80 views
0

我一直使用Promise很长一段时间,而且我一直都不喜欢笨重的代码。所以我喜欢异步/等待(理论上)是有道理的。将Express应用程序从承诺转换为异步/等待

但是,您只能在异步函数中使用await。如果我目前有每条路线作为功能(例如export function createLike(req, res, next)),那么该路线可以是async function?有什么我需要检查,如果我这样做?或者如果我这样做会发生奇怪的事情?我能保持函数与所谓的内像这样的async function正常功能(如果是这样的话):

export function createLike(req, res, next) { 
    doStuff() // does this need to be "await doStuff()" if it's the only actionable call in the parent function? 

    async function doStuff() { 
     // do asynchronous stuff via async/await 
     res.status(200).send('success') 
    } 
} 
+0

'这是否需要“等待doStuff()”'是doStuff异步? (看起来不是异步的) - 如果你不显示原始代码是什么,我们如何帮助转换? –

+0

我想你可以使用nodeJS的async。检查瀑布函数 –

+0

@JaromandaX'doStuff()'是异步的。我不认为特定的异步代码很重要,只是它需要是异步的。 @YananPicquenot为什么需要瀑布功能?使用async/await可以让你链接不同的异步函数而不需要瀑布。或者你的意思是更容易? – Matt

回答

0
export async function createLike(req, res, next) { 

易peasy。声明一个函数async只不过是让它返回一个Promise。

揭开你的整个简单的例子:

export async function createLike(req, res, next) { 
    // Don't bother putting inside a 'doStuff' if it's all you have. 
    // Get straight to the asyncing 
    const { something } = await someAsyncMethod(); 
    const { foo } = await fetch(`/get/this/${something}`).then((r) => r.json()); 
    console.log(foo); 
    res.status(200).send('success') 
} 

这将等待,直到它变得someAsyncMethod()的反应,然后取东西,发送响应之前。

+0

这很有道理。而且函数返回一个promise的事实不应该影响后续路由上的任何影响(例如错误处理路由),是正确的吗? – Matt

+0

这是正确的 - afaik express不使用其函数的返回值作为任何事情,所以它返回一个promise的事实应该被忽视。顺便说一句,我不知道这个反社会病人是谁经历和downvoting字面上的一切在这个问题上没有解释... –

+0

太棒了。我将通过我们的测试服务器运行一下,以确保没有任何不合适的事情发生。我会更新你喜欢cli,如果一切顺利,你将不会再听到我的消息。如果出现问题,我会让你知道哈哈。而且我也不知道,只是一个糟糕的一天,我猜... – Matt

0

使用koa 2+。它为async/await东西而建。

+0

项目已经建立了快速承诺。 – Matt

+0

我建议你将它转换为koa,因为Express在过去一般都是过时的,特别是在这种情况下。 –

+0

这是一个更大的事业。我可以轻松地将端点1转换为'async/await',而不必将所有内容移动到'koa'。尽管如此,我仍然会在下一个项目中牢记这一点。 – Matt

相关问题