mongoose 无法读取undefined的属性(阅读“then”),Promise.resolve()不起作用

jq6vz3qz  于 2023-08-06  发布在  Go
关注(0)|答案(1)|浏览(95)

由于某种原因,我的承诺没有按时解决。我不明白为什么,因为我的函数不是异步的。
我试图实现的是遍历整个数组,只有在所有元素都被验证之后才解析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

    }

字符串
任何帮助都很感激

mctunoxg

mctunoxg1#

更新:
我为我的代码找到了一个解决方案(仍然不知道第一个问题的答案)
response(resolve)允许我将我的信息发送到query。最后,最深的else语句确认循环结束,所以我开始了最后一个进程。
Thanks all:)

function recursiveCheck(cartIndex){
        return new Promise (resolve =>{
        let pieceOutOfStock = Piece.find({nombre: cart[cartIndex].name, cantidad: {$lte: cart[cartIndex].amount}});
        pieceOutOfStock.then(response =>{
            resolve(response);
        })
    }).then(query =>{
        if(!query.length){
            res.json({url: "http://localhost:3000/stockerror"});
            return query;
        }
        else{
            if(cart.length > cartIndex+1){
                return recursiveCheck(cartIndex+1);
            }
            else{
                stripeProcess();
            }
        }
    })
    }
    recursiveCheck(0);

字符串

相关问题