Redis Асинхронная / Ожидать Проблема в node.js - PullRequest
0 голосов
/ 13 мая 2018

Метод 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

1 Ответ

0 голосов
/ 13 мая 2018

Асинхронные функции возвращают обещание, так что вы выполняете вещи в стиле синхронизации внутри него, но все еще используете его в асинхронном стиле.

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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...