Mongoose有时会在承诺之后插入

时间:2018-01-24 17:46:35

标签: javascript node.js mongodb promise

我几周来一直在努力解决这些问题,我正在使用名为" Binance"的NPM。它与Binance API连接,其创建者为我们提供了以下代码:

binanceRest.newOrder({
    timestamp: new Date().getTime(),
    symbol: stack_item.bns_market,
    side: stack_item.bns_side,
    timeInForce: stack_item.bns_timeinforce,
    quantity: stack_item.bns_quantity, //min 0.05
    price: stack_item.bns_price,
    type: stack_item.bns_type
}).then((data) => {

}).catch((err) => {

});

确实 一致地创建订单,但是当我达到承诺时,我想插入一个包含它返回的数据的文档,如下所示:

binanceRest.newOrder({
    timestamp: new Date().getTime(),
    symbol: stack_item.bns_market,
    side: stack_item.bns_side,
    timeInForce: stack_item.bns_timeinforce,
    quantity: stack_item.bns_quantity, //min 0.05
    price: stack_item.bns_price,
    type: stack_item.bns_type
}).then((data) => {
    var data_insert = {
        orl_user: stack_item.bns_user,
        orl_exchange: 'Binance',
        orl_market: stack_item.bns_market,
        orl_id: data.orderId,
        orl_data: data,
        createdAt: new Date()
    }

    order_list_model.create(data_insert, function(err){
        if(err){ console.log(err) }else{
            console.log('insert_order_list');
        }
    });
}).catch((err) => {

});

程序始终显示控制台消息" insert_order_list",但它并不总是插入任何内容,它似乎随机插入,有时它确实有时它没有。

我试过插入3次看看发生了什么,似乎只插入了两次。

我之前从未见过这种行为,怎么会这么随意?

我插入的模型没有像unique或required那样的限制。它从未插入缺少字段的数据。

1 个答案:

答案 0 :(得分:1)

您的then功能无处可去。有时它会在您检查它是否插入任何内容之前解决,有时它不会。它总是会解决最终(这就是您总是看到日志的原因),但您需要更仔细地管理您的承诺,以确保按照您期望的顺序发生事情。

要解决此问题,请让then函数返回在order_list_model.create回调中解析的新承诺。