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

时间:2016-04-26 04:25:21

标签: 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"
  ]
}

有人可以指出我在这里做错了吗。

1 个答案:

答案 0 :(得分:8)

正如@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可能会改变。除非这是一个玩具项目,否则我不会使用它。您可以使用coBluebird.coroutine完成非常相似的操作。它们不太美观,但API不会改变,一旦async / await得到标准化,重构就会变得微不足道

编辑:添加进一步说明