在 Nodejs 中使用 async await 与 redis 和 bluebird
Using async await with redis and bluebird in Nodejs
如果我在这里错了,请纠正我。这就是我所做的
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/,您会注意到他们正在做的是将函数转换为生成器并将承诺的解析值生成给变量 reply
.如果不将其包装在可以转换为生成器的函数中,您将无法暂停执行,因此无法完成此操作。
另外,应该注意的是,这不是标准的一部分。它可能不会消失,但 API 可能会改变。所以除非这是一个玩具项目,否则我不会使用它。您可以使用 co or Bluebird.coroutine 完成非常相似的事情。它们在美学上不太令人愉悦,但 API 不会改变,一旦 async/await 标准化,重构将变得微不足道
编辑:添加进一步说明
如果我在这里错了,请纠正我。这就是我所做的
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/,您会注意到他们正在做的是将函数转换为生成器并将承诺的解析值生成给变量 reply
.如果不将其包装在可以转换为生成器的函数中,您将无法暂停执行,因此无法完成此操作。
另外,应该注意的是,这不是标准的一部分。它可能不会消失,但 API 可能会改变。所以除非这是一个玩具项目,否则我不会使用它。您可以使用 co or Bluebird.coroutine 完成非常相似的事情。它们在美学上不太令人愉悦,但 API 不会改变,一旦 async/await 标准化,重构将变得微不足道
编辑:添加进一步说明