我如何等待直到整个数组被推送以执行功能?

时间:2019-03-23 08:08:30

标签: javascript arrays mongoose

我正在为我的网站创建一个付款API,此付款API是围绕Monero设置的,我从MongoDB数据库中获取付款所需的值以及将其发送到哪里。我正在用猫鼬做这个

我已经计划了所有内容,它从一个数组中获取当天需要支付的总净值,并从另一个数组中获取最新的钱包条目,以便它知道将金额发送至何处。

当我尝试使用此数据构造一个新数组并将此数据推入其中时,就会出现问题。

Monero本质上只允许一次发送一笔交易,锁定您的剩余余额和所发送的金额,直到完全确认一笔交易为止。一笔交易可以分为多笔交易,但都必须作为“一个”大块发送。

因此,当我向Monero发送请求时,它必须包括每个钱包的数组以及每个钱包收到的金额。

当我推送到数组时,我注意到它每次推送到数组时都会执行Transfer Monero函数。我该如何做,以便在发送该变量以进行传输之前,首先使用满足我的if语句的所有可能值(日期为今天,paymentStatus设置为false,到期金额不等于或小于0)将其完全推入数组。使用Monero函数吗?

我已经尝试使用返回函数等。不确定如何实现异步/等待或承诺

var bodyParser = require('body-parser');
var mongoose = require('mongoose');
var moment = require('moment');
var User = require('../models/user');

var moneroWallet = require('monero-nodejs');
var Wallet = new moneroWallet('127.0.0.1', 18083);



var destinations = []
var xmrnet = []

// connect to MongoDB
mongoose.connect('mongodb://)

  // Fetch IDs

  function getID(){ 
    var cursor = User.find({}, function (err, users) {
    }).cursor();
    return cursor;
    }


  var cursor = getID();
  cursor.on('data', function(name){

    var id = name.id

    // Map all users using IDs

    function getUsers(){ 
    var cursor = User.findById(id, function (err, users) {
    }).cursor();
    return cursor;
    }

var cursor = getUsers();
cursor.on('data', function(user){

    net = user.netHistory.map(element => element)
    order = user.orderHistory.map(element => element)
    userWallets = user.userWallets.map(element => element)


        var today = moment();   
        // date is today? validation
        for (var i = 0; i < net.length; i++){



        netDate = net[i].net_date_time

        netStatus = net[i].paymentStatus

        netUSD = net[i].current_usd_net


        xmrnet = net[i].xmr_net

            for (var j = 0; j < userWallets.length; j++){
            xmrwalletsU = userWallets[j].xmr_wallet

            if(xmrwalletsU !== ''){
                xmrwallet = xmrwalletsU
            }
        }

        var Dateistoday = moment(netDate).isSame(today, 'day');;

        if (Dateistoday === true && xmrnet !== 0 && netStatus === false){


            console.log('its true')



            netid = net[i].id



            var destinationsU = [{amount: xmrnet, address: xmrwallet}]

            destinations.push(destinationsU)

            console.log(destinations)
            // problem is right here with destinations^ it pushes one by one 




          // problem over here as well as wallet.transfer executes one by one by the time it gets to the second, the balance is already locked, unable to send
          Wallet.transfer(destinations).then(function(transfer) {
                console.log(transfer);


                var payouts = {
                    payout_date_time: Date(),
                    payout_usd_amount: netUSD,
                    xmr_wallet: xmrwallet,
                    xmr_txid: transfer.tx_hash,
                }


// add payout to payoutHistory array 
            User.findByIdAndUpdate(id, {"$addToSet": { 'payoutHistory': [payouts]}},
            function(err, user) {
              if(err) { console.log(err) }
              else {
                console.log()
              };
            })

// update paymentStatus of specific net entry to true
            User.updateMany({
                "_id": id,
                "netHistory._id": netid
                }, {
                "$set": {
                    "netHistory.$.paymentStatus": true
                }
                }, function(error, success) {

                })

        })   



        }


    }
})
})

0 个答案:

没有答案