如何在nodejs中使用ioredis链接返回

How to chain returns in nodejs with ioredis?

本文关键字:ioredis 链接 返回 nodejs      更新时间:2023-09-26

我正在使用ioredis,我想在下面的示例中一直返回到匿名函数中的路径和值。

console.log(
    function (jsonGraphArg) {
        return Redis.hget(jsonGraphArg[0], jsonGraphArg[1], function(error, result){
             result = JSON.parse(result);
             return {
                 path: [jsonGraphArg[0], jsonGraphArg[1], jsonGraphArg[2][0]],
                 value: result[jsonGraphArg[2][0]]
             };
        });
    }
);

我希望console.log()的结果是这样的:

{
    path: "something",
    value: "something else"
}

但是它给了我:

{
  _bitField: 1,
  _fulfillmentHandler0: [Function: successAdapter],
  _rejectionHandler0: [Function: errorAdapter],
  _progressHandler0: undefined,
  _promise0: [Function],
  _receiver0: [Circular],
  _settledValue: undefined
}

首先,你试图记录函数声明而不是函数执行结果。

console.log(
    (function (jsonGraphArg) {
        return Redis.hget(jsonGraphArg[0], jsonGraphArg[1], function(error, result){
             result = JSON.parse(result);
             return {
                 path: [jsonGraphArg[0], jsonGraphArg[1], jsonGraphArg[2][0]],
                 value: result[jsonGraphArg[2][0]]
             };
        });
    })();
);

这段代码将为您提供函数执行的结果。

第二个问题是Redis.hget是一个异步函数。为了在redis返回结果时尽快得到结果,你需要使用回调。

var callback = function(res) {
    console.log(res);
}
(function (jsonGraphArg, callback) {
    return Redis.hget(jsonGraphArg[0], jsonGraphArg[1], function(error, result){
         result = JSON.parse(result);
         return callback({
             path: [jsonGraphArg[0], jsonGraphArg[1], jsonGraphArg[2][0]],
             value: result[jsonGraphArg[2][0]]
         });
    });
})();

使用此代码,当redis返回数据时,它将调用callback函数与res参数,这将是您的对象与路径和值属性。

答案在承诺里

console.log(
    function (jsonGraphArg) {
        return Redis.hget(jsonGraphArg[0], jsonGraphArg[1]).
        then(function(result){
             result = JSON.parse(result);
             return {
                 path: [jsonGraphArg[0], jsonGraphArg[1], jsonGraphArg[2][0]],
                 value: result[jsonGraphArg[2][0]]
             };
        });
    }
);