这是启动apollo服务器的方式:

server.listen(port).then(({ url }) => {
  console.log(`Server ready at ${url}`)
})


我想使用异步/等待Synthax。所以我尝试做-这是错误的:

server.listen(port, async ({ url }) => {
  await anyFunction()
  console.log(`Server ready at ${url}`)
})

最佳答案

async-await的行为与.then()链中的行为类似,await等待诺言得到解决或拒绝,然后像.then()在诺言解决上继续并在.catch()在诺言拒绝上一样继续处理。

await返回与.then()履行诺言解决的结果相同的结果,即:

foo().then( function(result){}); // got result here
result = await foo(); // will get same result here too as in above function.


类似地,catch(err)中的try-catch.catch( function(err) {})中的.then()-.catch()得到相同的错误。

了解有关async-await herehere的更多信息。

要将您的.then()转换为async-await,只需执行以下操作:

(async function () {
    try {
        const { url } = await server.listen(port);
        console.log(`Server ready at ${url}`);
    } catch(e) {
        // handle errors
    }
})();      // This is [IIFE][3]. In this case it's better to have IIFE then regular function, as functions needed to be called.


异步等待功能:

async function startServer() {
    try {
        const { url } = await server.listen(port);
        console.log(`Server ready at ${url}`);
    } catch(e) {
        // handle errors
    }
}

startServer();    // Not an IIFE

关于javascript - 为server.listen()异步而不是then(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53294080/

10-13 06:32