Express 路线内的 async/await

Tom*_*llo 4 javascript node.js express async-await

我有一个通过 url 参数收集信息的节点/快速路由。我使用这些参数来启动一个单独的函数,该函数需要几秒钟的时间。我正在尝试 async/await 等待函数返回数据,但路由逻辑只是向前推进,而不是等待任何东西。

这是语法/结构问题吗?欢迎任何提示,因为我似乎碰壁了。谢谢!

app.get('/testlogin', (req, res) => {
  (async () => {
    // This needs to wait until loginToApp returns data but it does not
    await loginToApp(req.query.u, req.query.p)
       .then((data) => {
        console.log('from testlogin route. This should print after loginToApp');
        console.log(data); // the returned data
      });
  })();
});

async function loginToApp(user, pwd) {
  (async () => {
    setTimeout(() => {
      const data = { temp: 1, rtemp: 2 };
      console.log('from loginToApp');
      console.log(data);
      return data;
    }, 2000);
  })();
}
Run Code Online (Sandbox Code Playgroud)

Nic*_*ick 7

您的loginToApp函数需要返回 aPromise给您await。如果使用 a setTimeout,那么您必须将其显式包装在一个新的 Promise 中。

app.get('/testlogin', async (req, res) => {
  const data = await loginToApp(req.query.u, req.query.p);
  console.log(data);
});

async function loginToApp(user, pwd) {
  return new Promise(res => {
    setTimeout(() => {
      const data = { temp: 1, rtemp: 2 };
      console.log('from loginToApp');
      console.log(data);
      res(data);
    }, 2000);
  })
}
Run Code Online (Sandbox Code Playgroud)