首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Nodejs中对redis和bluebird使用异步等待

在Nodejs中对redis和bluebird使用异步等待
EN

Stack Overflow用户
提问于 2016-04-26 12:25:21
回答 1查看 12.3K关注 0票数 2

如果我说错了,请纠正我。这就是我要做的

代码语言:javascript
复制
client = Promise.promisifyAll(redis.createClient())
let reply = await client.getAsync('foo_rand000000000000')
console.log('reply',reply.toString())

我得到了Unexpected token错误。

我的.babelrc里有这个

代码语言:javascript
复制
{
  "presets": [
    "es2015",
    "stage-3"
  ]
}

有人能指出我做错了什么吗。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-26 12:31:01

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

代码语言:javascript
复制
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可能会改变。所以我不会使用它,除非这是一个玩具项目。您可以使用coBluebird.coroutine实现非常类似的功能。它们不是很美观,但API不会改变,一旦异步/等待得到标准化,重构将是微不足道的

编辑:添加更多说明

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36855239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档