由于某种原因,我的承诺没有按时解决。我不明白为什么,因为我的函数不是异步的。
我试图实现的是遍历整个数组,只有在所有元素都被验证之后才解析promise(如果必要的话)
因此,只要满足解析条件,我就调用promiseHelper = Promise.resolve(value)
。但不知为什么我得到了:Cannot read properties of undefined (reading 'then')
,即使promiseHelper.then
写在递归函数之后,这意味着helper
应该在then
语句之前解析。
我的问题是:为什么变量在代码的这一部分没有成为promise?如果可能的话,实现这种功能的更好方法是什么
代码如下:
const cart = req.body.items; //Array of items
let promiseHelper;
function recursiveCheck(cartIndex){
let pieceOutOfStock = Piece.find({nombre: cart[cartIndex].name, cantidad: {$gte:cart[cartIndex].amount}});
pieceOutOfStock.then(response =>{
if (!response.length){ //If nothing on the query, resolve as false
console.log("not enough:", element.amount, response.length);
promiseHelper = Promise.resolve(false);
return false;
}
else{
if(cart.length > cartIndex+1){ //If something on the query and items left, validate next item
recursiveCheck(cartIndex+1);
}
else{ //if last item, resolve as true
promiseHelper = Promise.resolve(true);
return true;
}
}
})
}
function getStock(){
return new Promise (resolve =>{
recursiveCheck(0);
promiseHelper.then(response =>{
if(!response){
resolve("reject")
}
else{
resolve("All good")
}
})
})
}
getStock().then(async response =>{
//do some stuff
}
字符串
任何帮助都很感激
1条答案
按热度按时间mctunoxg1#
更新:
我为我的代码找到了一个解决方案(仍然不知道第一个问题的答案)
response(resolve)
允许我将我的信息发送到query
。最后,最深的else语句确认循环结束,所以我开始了最后一个进程。Thanks all:)
字符串