javascript - 异步和等待实现返回失败
问题描述
调用者函数调用异步函数 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 没有做。
解决方案
我会避免设置超时并像您在第一个函数上所做的那样,将代码包装在异步函数上并等待结果
推荐阅读
- gitlab - 在合并期间保持 package.json 版本完整
- graphql - graphql 组织:将“动作”放入嵌套类型以减少/分组入口点?
- jquery - 显示“等待”模式_before_我的冗长表格排序开始(然后消失)
- php - 如何在 WordPress 内容之外替换 HTML?
- python - pandas 自定义聚合函数
- c# - 面对方向的随机敌人移动
- ios - 一旦已经在 WebView 中,如何使用 WKWebView 打开外部链接?
- r - 仅对数字列求和并将值除以总数
- phabricator - 在 Phabricator 中更改用户的密码
- reactjs - 如何动态生成 Joi 模式并将其保存为 React JS 中的对象