Node.js 我的第二个承诺在从第一个承诺获取数据之前被调用,导致未定义的错误。不知道我在做什么
在低价函数调用之后,它直接转到下一个promise调用并返回未定义的,然后转到低价。我不确定我做错了什么,我真的很感激任何帮助。当Underprice获得密钥时,数据就在那里,如果我放一个console.log,它就会打印出来。问题是第二个问题,然后在第一个问题没有解决的情况下发表声明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.
/// 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。我什么也没拿回来我。。。你知道我该怎么做吗?谢谢您仍然需要始终解析承诺,即使使用空值