在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/等待得到标准化将是微不足道的
编辑:添加进一步的解释