【问题标题】:How do I read the query in a mongoose callback?如何在猫鼬回调中读取查询?
【发布时间】:2016-05-22 08:23:40
【问题描述】:

我的代码通过数组上的 .forEach() 循环运行。每次迭代都会运行一个 mongoose 查询。

我的查询返回一个空对象,这不应该发生,我想知道为什么!

我不能要求回调打印使用的值,因为在 promise 解决时 forEach 循环已经完成,所以它只打印数组的最后一项(这是预期的结果)。

如何访问在 mongoose 回调中运行的查询?

array.forEach((item,i)=>{
    model.findOneAndUpdate({a:item.a},item).exec((err,result)=>{
        if(err){throw(err.stack);return;}

        if(!result)
            throw new Error("Nothing returned for query: "+QUERY_STRING)
    })
})

【问题讨论】:

    标签: javascript node.js mongodb mongoose


    【解决方案1】:

    从此改变:

    array.forEach((item,i)=>{
        model.findOneAndUpdate({a:item.a},item).exec((err,result)=>{
            if(err){throw(err.stack);return;}
    
            if(!result)
                throw new Error("Nothing returned for query: "+QUERY_STRING)
        })
    })
    

    到这里:

    array.forEach((item,i)=>{
        (function (item, i) {
            model.findOneAndUpdate({a:item.a},item).exec((err,result)=>{
                if(err){throw(err.stack);return;}
                console.log(item, i);
                if(!result)
                    throw new Error("Nothing returned for query: "+QUERY_STRING)
            })
        })(item, i)
    })
    

    【讨论】:

    • 这很有意义。我仍在思考“任何东西都可以是函数”的 javascript 概念。
    猜你喜欢
    • 2019-09-29
    • 2014-01-10
    • 2020-06-29
    • 2018-03-07
    • 2012-09-30
    • 2018-12-08
    • 2017-05-08
    • 2022-11-13
    • 2023-03-21
    相关资源
    最近更新 更多