在Nodejs中使用asynchronous等待redis和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指出的那样,你需要把它包装在一个asynchronous函数中

 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/你会注意到他们正在做的是将函数转换为一个生成器,并产生解决了对可变reply承诺的价值。 如果没有将其封装在可以转换为生成器的函数中,您将无法暂停执行,因此无法完成此操作。

另外,应该指出,这不是标准的一部分。 这可能不会消失,但API可能会改变。 所以我不会使用这个,除非这是一个玩具项目。 你可以使用co或者Bluebird.coroutine来完成一些非常相似的事情。 他们不是很美观,但API不会改变,重构一次asynchronous/等待得到标准化将是微不足道的

编辑:添加进一步的解释