首页 > 解决方案 > 异步和等待实现返回失败

问题描述

调用者函数调用异步函数 wcNam2Uid2 以返回名称。然后,调用者console.log 返回(name)。

console.log 是:

Enter nam2userid , input:Tommy Leung
 in main, resolve result : undefined
result id :tommyleung
nam2userid resolved , wc_id :  tommyleung  "

我的 main.js 是:

var express = require('express');


async function caller(snam) {
     //console.log(" main start with: "+ snam);
     const uid = await wcNam2Uid2(snam); 
     console.log(" in main, resolve result : " + uid);
  
    } 
let wcname ="Tommy Leung";
caller(wcname);

函数 wcNam2Uid2 中的代码

async function wcNam2Uid2(wcname )  
{
     //return data
 var myJson ="";
 var mysql = require('mysql');
 var fs = require('fs');
 var bodyParser = require('body-parser');
 var mnam = wcname;
  console.log("Enter nam2userid , input:" + mnam );
      //wcname;
   var con = mysql.createConnection({
          host: "localhost",
          user: "root",
          password: "",  
          database: "crm"
         });
     // select leads by name
        con.connect(function(err) {
            if (err) throw err;
            con.query("SELECT wc_id FROM wcdirlist where name = '" + mnam + "' ", function (err, result, fields) {
            setTimeout(() => { 
             if (err) throw err;
              
              console.log("result id :"+ result[0].wc_id);
              var wcid = result[0].wc_id;
              con.end;
              console.log(" nam2userid resolved , wc_id :  " + wcid);
            
             return wcid;            

            },2000);
       });
   });
 }

结尾的摘录是关注点,(上面正在运行。)

   console.log(" nam2userid resolved , wc_id :  " + wcid);
            
             return wcid;            

如您所见,第一行很好,因为它在 console.log 中正确显示,但下一行“return wcid”失败。
console.log 中函数调用者的响应过早出现的第二行是问题,我想 await 没有做。

标签: javascriptasynchronous

解决方案


我会避免设置超时并像您在第一个函数上所做的那样,将代码包装在异步函数上并等待结果


推荐阅读