【问题标题】:Redis Async / Await Issue in node.jsnode.js 中的 Redis 异步/等待问题
【发布时间】:2018-05-13 19:04:30
【问题描述】:

方法 asyncBlock 正在正确执行。

但是(其他两种方法)当它被分成 2 种方法时,它的重新调整承诺而不是实际值。

https://runkit.com/sedhuait/5af7bc4eebb12c00128f718e

const asyncRedis = require("async-redis");
const myCache = asyncRedis.createClient();

myCache.on("error", function(err) {
    console.log("Error " + err);
});

const asyncBlock = async() => {
    await myCache.set("k1", "val1");
    const value = await myCache.get("k1");
    console.log("val2",value);

};
var setValue = async(key, value) => {
    await myCache.set(key, value);
};

var getValue = async(key) => {
    let val = await myCache.get(key);
    return val;
};
asyncBlock(); //  working 
setValue("aa", "bb"); // but this isn't 
console.log("val", getValue("aa"));//but this isn't 

输出

val Promise { <pending> }
val2 val1

【问题讨论】:

  • 所有async 函数都返回一个promise——它们就是这样工作的。该承诺的已解决值(您可以使用.then()await 获得)将是您从async 函数返回的值。

标签: node.js redis async-await


【解决方案1】:

异步函数返回一个 Promise,因此您在其中以同步方式执行操作,但您仍在以异步方式使用它。

var setValue = async(key, value) => {
  return await myCache.set(key, value);
};

var getValue = async(key) => {
  let val = await myCache.get(key);
  return val;
};

async function operations() {

  console.log(await setValue("aa", "bb"));
  console.log("val", await getValue("aa"));

}

operations();

【讨论】:

    猜你喜欢
    • 2013-03-25
    • 2021-10-11
    • 1970-01-01
    • 2018-12-09
    • 2020-04-09
    • 2021-03-26
    • 1970-01-01
    • 1970-01-01
    • 2022-10-25
    相关资源
    最近更新 更多