node.js - 在 Nodejs 中使用 async await 与 redis 和 bluebird

标签 node.js async-await babeljs bluebird

如果我在这里错了,请纠正我。我就是这样做的

client = Promise.promisifyAll(redis.createClient())
let reply = await client.getAsync('foo_rand000000000000')
console.log('reply',reply.toString())

我得到了 Unexpected token 错误。

我的 .babelrc 中有这个

{
  "presets": [
    "es2015",
    "stage-3"
  ]
}

谁能指出我在这里做错了什么。

最佳答案

正如@Bergi 指出的那样,您需要将其包装在一个异步函数中

client = Promise.promisifyAll(redis.createClient())

async function main() {
  let reply = await client.getAsync('whatever');
  console.log('reply', reply.toString());
}

main();

扩展一下,如果您查看此文档 http://babeljs.io/docs/plugins/transform-async-to-generator/您会注意到他们所做的是将函数转换为生成器,并将 promise 的已解析值生成给变量 reply。如果不将其包装在可以转换为生成器的函数中,您将无法暂停执行,因此无法完成此操作。

另外,应该注意的是,这不是标准的一部分。它可能不会消失,但 API 可能会改变。所以除非这是一个玩具项目,否则我不会使用它。您可以使用 co 完成非常相似的事情或 Bluebird.coroutine .它们在美学上不太令人愉悦,但 API 不会改变,一旦 async/await 标准化,重构将变得微不足道

编辑:添加进一步的解释

关于node.js - 在 Nodejs 中使用 async await 与 redis 和 bluebird,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36855239/

相关文章:

c# - 如何推迟执行直到某些事件发生?

typescript - 如何使用 noImplicityAny 和不使用 allowJs 在 TS 中导入 JS

node.js - 如何定义包含开始日期和结束日期的 CloudWatch 事件率表达式

javascript - 重定向 localhost 而不是 myserver.org :3000/login/callback

javascript - Node.js 和 Express : wait for asynchronous operation before responding to HTTP request

c# - 在返回之前等待任务时会发生什么?

javascript - 如何在javascript中配置babel7以支持 `import {}`从 `export default`

javascript - 如何使用 Babel 构建 Webpack(同时保留源文件夹结构)?

c++ - JSON 或 Protocol Buffer 替换自定义 TCP 消息

node.js - Node,js - Mongoose - 无法保存地理多边形 - CastError : Cast to number failed