ParallelSaveError:无法并行保存()同一个文档

时间:2021-03-07 15:54:13

标签: node.js mongodb mongoose backend

我现在收到这个错误有一段时间了。我认为承诺会解决这个错误的问题。这是我没有承诺功能的代码。有什么方法可以解决它而不返回承诺吗?

Tag.find({ tag: bmTweet.tag }, function (err, tag) {
    if (tag.length === 0) {
        bmtTag.tag = bmTweet.tag
        Tag.create(bmtTag, function (err, tag) {
            user[0].tags.push(tag)
            user[0].save()
            console.log('Tag created.')
        })
    }
})
Tweet.create(bmTweet, function (err, tweet) {
    user[0].tweets.push(tweet)
    user[0].save()
    console.log('Tweet saved.')
})

这是我的承诺函数代码:

Tag.find({ tag: bmTweet.tag }, function (err, tag) {
    if (tag.length === 0) {
        bmtTag.tag = bmTweet.tag
        Tag.create(bmtTag, function (err, tag) {
            user[0].tags.push(tag)
            user[0].save()
            console.log('Tag created.')
            return Promise.resolve({ msg: 'Worked' })
        }).then(function () {
            Tweet.create(bmTweet, function (err, tweet) {
                user[0].tweets.push(tweet)
                user[0].save()
                console.log('Tweet saved.')
            })
        })
    }
})

我是新手。所以请帮我找出我的菜鸟错误。谢谢。

1 个答案:

答案 0 :(得分:0)

所以我实际上做错了。我想,无论如何都需要调用第二个函数,为什么不反过来呢。因此,我返回了一个 promise 表单 Tweet.create 并向 .then 添加了一个 Tag.create。这是更新后的代码:

func.tweetCreate(bmTweet, user)
  .then(function (msg) {
            func.tagFindOrCreate(bmTweet, bmtTag, user);
  });

和函数定义:

tweetCreate: function (tweet, user) {
    return new Promise(function (resolve) {
        Tweet.create(tweet, function (err, tweet) {
            user[0].tweets.push(tweet);
            user[0].save();
            console.log("Tweet saved.")
            resolve();
        })
    })
}