【发布时间】:2021-11-06 10:53:38
【问题描述】:
调用者函数调用异步函数 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 没有做。
【问题讨论】:
-
顺便说一句
con.end;什么都不做,也许你的意思是con.end(); -
“下一行“return wcid”失败。”:什么意思?返回肯定没有失败:它执行了。但是你不能指望已经现在输出一个future结果。
-
wcNam2Uid2 返回什么。 return wcid 是 con.connect 内部匿名回调 fn 的返回。在这种情况下,匿名函数将返回 wcid 但不返回 wcNam2Uid2。如果您没有明确给出 wcNam2Uid2 的返回值,它将返回 undefined。
-
@Akhil,我在上面的问题中包含了函数 wcNam2Uid2 的全部代码,我如何以及在哪里将 wcid 返回给调用者?