es6 Promise .then问题

新手上路,请多包涵

用游标遍历一个mongo表,进行更新操作。
同时用一个数量表记录更新完成的数量,每更新完一条万条,就更新一次数量表。
问题出现在数量表的更新操作上,updateOne不加.then的时候就不更新数据,加上了才更新。按理说promise建立了就会执行啊,这里不知道什么原因。

代码如下:

model = mongoose.model(...)
num_model = mongoose.model(...)

model.find().skip(num).cursor().
    on('data', function (doc) {
        doc = JSON.parse(JSON.stringify(doc));
        
        let _id = doc._id,
         capital_final = clear(doc.capital),
         capitalactl_final = clear(doc.capitalactl);

        model.updateOne({
            _id
        }, {
            capital: capital_final,
            capitalactl: capitalactl_final
        }).then(res => {
            num_now++;
            
            if (num_now > num + 10000) {
                num += 10000
                num_model.updateOne({
                        id: 1
                    }, {
                        num: num
                    })
                    //没有下面的代码就不进行更新操作
                    .then(res => {
                        console.log(res);
                    }).catch(err => {
                        console.log(err);
                    })
                    //没有上面的代码就不进行更新操作
            }
        })  
    })

//数据处理
function clear(){...}
阅读 3k
4 个回答

不是不操作吧,因为是异步操作,所以在你检查数据的时候,上一步还没完成返回,所以看起来像是没有操作。

啥版本?

mongoose 出的比较早,自带的 Promise 叫 mpromise,不是 ES6 的那套。

想要符合 ES6 的那套,你可以先 mongoose.Promise = Promise; 试试。

新手上路,请多包涵

mongoose 中的promise并不是标准promise,必须调用then方法或exec(),才会执行

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题