Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 我的第二个承诺在从第一个承诺获取数据之前被调用,导致未定义的错误。不知道我在做什么_Node.js_Redis_Callback_Promise - Fatal编程技术网

Node.js 我的第二个承诺在从第一个承诺获取数据之前被调用,导致未定义的错误。不知道我在做什么

Node.js 我的第二个承诺在从第一个承诺获取数据之前被调用,导致未定义的错误。不知道我在做什么,node.js,redis,callback,promise,Node.js,Redis,Callback,Promise,在低价函数调用之后,它直接转到下一个promise调用并返回未定义的,然后转到低价。我不确定我做错了什么,我真的很感激任何帮助。当Underprice获得密钥时,数据就在那里,如果我放一个console.log,它就会打印出来。问题是第二个问题,然后在第一个问题没有解决的情况下发表声明 /// grab all online var getActiveData = (payload) => { pub.smembers('partner:services:' + payload.

在低价函数调用之后,它直接转到下一个promise调用并返回未定义的,然后转到低价。我不确定我做错了什么,我真的很感激任何帮助。当Underprice获得密钥时,数据就在那里,如果我放一个console.log,它就会打印出来。问题是第二个问题,然后在第一个问题没有解决的情况下发表声明

/// grab all online
var getActiveData = (payload) => {
     pub.smembers('partner:services:' + payload.services)
      .then((data) => {
        Promise.all(data.map(underPrice.bind(this, payload)))
      })
      .then((data) => {
        Promise.all(console.log(data));
      });};
这是低价代码

var underPrice = (payload, key) => {
  return new Promise((resolve, reject) => {
    pub.hmget(key + ":services:" + payload.services, "amount", (err, data) => {
      if (err) reject(err); //will display '1, 3, 5, 7'
      else {
        data <= payload.price ? resolve(key) : reject(key);
      }
    });
  });
};
您忘记了从函数中返回承诺,特别是从then回调中,因此调用方将无需等待

function getActiveData(payload) {
    return pub.smembers('partner:services:' + payload.services)
//  ^^^^^^
    .then(data => {
        return Promise.all(data.map(underPrice.bind(this, payload)))
//      ^^^^^^
    })
    .then(data => {
        console.log(data);
        return data;
//      ^^^^^^
    });
}

请格式化您的代码。您不是在那里为您的第一个承诺呼叫resolve或reject。你甚至需要在那里使用新的承诺吗?pup.smembers是否返回承诺?pub.smembers是一个redis函数。我从pub.smembers中删除了return-new-promise语句。我仍然接到一个未定义的电话。我对承诺是相当陌生的。getActiveData应该返回对原始调用的承诺。我更改了代码并删除了promise调用,但仍然得到一个未定义的。知道我遗漏了什么吗?可能的副本还没有尝试过,但这是我回到家后要做的第一件事,并回答:谢谢,这很有帮助。另一个问题是-在低价函数中,我正在执行一个if语句,其中只应返回与大小写匹配的键。所以当我做resolvekeys时,如果它匹配,如果不匹配,则为null。我什么也没拿回来我。。。你知道我该怎么做吗?谢谢您仍然需要始终解析承诺,即使使用空值