如何获取具有回调的内置方法的映射的值

How to get value of maps of build in method that have callback

提问人:rusli Abdul gani 提问时间:1/19/2023 最后编辑:rusli Abdul gani 更新时间:1/19/2023 访问量:30

问:

我有一些函数需要获取值并返回它,但是在这些函数中,有一些数组映射,在其中,我需要调用内置函数,其中包含回调。

代码如下:

const db = require('db')
function test(){
   let arr = [1,2,3,4,5]
   let result = []
  arr.map(function (val, idx){
      db.get(key, function (err, value) {
         //how can i get all value and passing it to result variable and passing the result to become return value in test() function ?
         // db.get() is only return true, not return any other value
     }
  })
}

如何在redisGetAll函数中获取数据并返回..

我已经做的是:

const db = require('db')
function test(){
   let arr = [1,2,3,4,5]
   let result = []
   arr.map(function (val, idx){
      db.get(key, function (err, value) {
         result.push({key, value})
     }
  })
  return result //this should be still empty array, cause result.push happen in async process, 
}

我知道我无法分配给数据变量,因为这是异步回调,它仍然是空数组,因为第一次启动。.

JavaScript 节点.js 数组 redis 回调

评论


答:

0赞 Ele 1/19/2023 #1

您应该遵循 async-await 方法,如下所示

const db = require('db')
async function test() {
  const arr = [1, 2, 3, 4, 5]
  return await Promise.all(arr.map(async (val, idx) => getObj(key)));
}

function getObj(key) {
  return new Promise(function(resolve) {
    db.get(key, function(err, value) {
      resolve({
        key,
        value
      });
    });
  });
}

我假设你知道变量来自哪里。另一方面,请记住,必须调用此函数 waitkeytestawait test()