如何等待猫鼬查询结果异步功能?

时间:2019-02-02 03:24:53

标签: node.js mongoose

我有一个具有功能的utils文件:

function max_entries_reached(callback){
EntriesCounterDB.getCounter(this.username, function(error, 
    counter){
       if(counter > this.maxentries) callback(true);
       else callback(false);
    }
}

它是一个简单的函数,它基于猫鼬查询来响应true / false ...

async function run_checks(){
     while(is_opening_hours()){
          utils.max_entries_reached(async function(maxstop) {
          if (maxstop !== true) {
               await switch_mode();
          }
          await utils.sleep(60*10);
     }
}

此代码是一个非常快速的无限循环,似乎跳过了所有睡眠等,只是在while循环中循环。我猜它调用的东西不同步...

我正在尝试完成一些琐碎的事情,但无法弄清楚。

我只希望能够使用以下命令运行run_checks()函数:

await run_checks();

然后等待猫鼬的结果,然后再运行下一个异步函数switch_mode()...如何在没有超快速循环的情况下执行此操作?

2 个答案:

答案 0 :(得分:1)

Mongoose回调API已过时,因为它长期支持Promise。

应该是:

if($stmt->execute()){
    //store retrieved row to a variable
    $row = $stmt->fetch(PDO::FETCH_ASSOC);

     // display the row after fetching the contents.
    var_dump($row); 

    //values to fill up our form
    $payment_id = $row['payment_id'];
    $payment_supplier = $row['payment_supplier'];
    $payment_ref = $row['payment_ref'];
    $payment_cost_rating = $row['payment_cost_rating'];
    $payment_amount = $row['payment_amount'];

}else{
    echo "Unable to read record.";
}

哪些可以链接任何其他承诺:

async function max_entries_reached(){
  const counter = await EntriesCounterDB.getCounter(this.username);
  return (counter > this.maxentries);
}

答案 1 :(得分:0)

尝试这样

async function run_checks(){
         utils.max_entries_reached(async (maxstop) {
         if (maxstop !== true) {
              await switch_mode();
         }
    }