呼叫者函式呼叫異步函式 wcNam2Uid2 以回傳名稱。然后,呼叫者 console.log 回傳(名稱)。
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 中函式呼叫者的回應過早出現的第 2 行是問題,await 沒有做,我想。
uj5u.com熱心網友回復:
我會避免設定超時并像您在第一個函式中所做的那樣,將代碼包裝在異步函式上并等待結果
uj5u.com熱心網友回復:
我在 stackflow 內部研究過,一篇文章看起來像是使用回呼的解決方案。回呼鏈接: Node.js 從 MySQL 查詢回傳結果
我的代碼:
function getwcid(uname, callback)
{
const mysql = require("mysql");
const con = mysql.createConnection({
host: "localhost",
user: "root",
password: "",
database: "crm"
});
con.query( "SELECT wc_id FROM wcdirlist WHERE name = '" uname "'", function(err, result)
{
if (err)
callback(err,null);
else
callback(null,result[0].wc_id);
});
return
}
//call Fn for db query with callback
getwcid("Tommy Leung", function(err,data){
if (err) {
// error handling code goes here
console.log("ERROR : ",err);
} else {
// code to execute on data retrieval
console.log("result from db is : ",data);
}
});
return;
控制臺日志:
C:\Users\Lenovo\eclipse-workspace\.metadata\.plugins\org.eclipse.wildwebdeveloper.embedder.node\node-v14.15.4-win-x64\node.exe test_getwcid_3.js
result from db is : tommyleung
回呼的答案非常簡單,任何人都有更短的答案 await ?
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/352326.html
標籤:javascript 异步
