[英]Using promise to pass results of one NodeJS module.export function to another NodeJS module.export function
我正在使用Core和CoreTest作為兩個功能來處理一些現有的NodeJS代碼。 CoreTest運行查詢並將選定的行存儲在名為CoreSQL的變量中。 Core也正在運行一些查詢,但是它需要CoreSQL的一部分作為其中一個查詢的參數。
我想我打錯了CoreTest
module.exports = {
CoreTest: (req, res) => {
return new Promise((resolve, reject) => {
const core = db.format.escape(req.query.q);
const coreSQL = `query with parameter = ${core}`;
returnData(coreSQL, resolve, reject);
resolve(coreSQL);
})
},
Core: (req, res) => {
return new Promise((resolve, reject) => {
if (req.query.q.length > 0) {
var core = module.exports.CoreTest(req, res);
}
else
{
reject("PROBLEMS")
}
const coreSQLceDevID = `query where parameter like ${core}`
const coreSQLpID = `query where parameter like ${coreSQLceDevID})`
const coreSQL = `query where parameter like ${coreSQLpID}`
returnDataB(coreSQL, resolve, reject);
})
}
}
返回數據函數運行SQL查詢,如下所示:
const returnData = (sql, resolve, reject) => {
db.query(sql, (err, result) => {
if (err)
reject(err)
else
resolve(result)
})
}
我收到以下錯誤:
error: Unhandled rejection!
Reason:TypeError: Cannot read property 'q' of undefined,
Promise: [object Promise]
雖然當我使用斷點檢查q的值時,它並不是未定義的,所以如何調用CoreTest一定是一個問題。
兩個問題:
在CoreTest
,您呼叫都returnData
和resolve
。 刪除立即的resolve()
調用, returnData
將在以后執行。 (順便說一句,我建議將其重命名為runQuery
左右)。
CoreTest(req, res) { return new Promise((resolve, reject) => { const core = db.format.escape(req.query.q); const coreSQL = `query with parameter = ${core}`; returnData(coreSQL, resolve, reject); }) }
在Core
,您似乎期望CoreTest()
同步返回一個值。 它做不到,它返回一個承諾。 您需要使用then
或await
將其余代碼鏈接到該代碼。 另外,您還應使new Promise
包裝器保持最小:
Core(req, res) { if (req.query.q.length == 0) { return Promise.reject("PROBLEMS"); } return module.exports.CoreTest(req, res).then(core => { // ^^^^^ return new Promise((resolve, reject) => { const coreSQLceDevID = `query where parameter like ${core}` const coreSQLpID = `query where parameter like ${coreSQLceDevID})` const coreSQL = `query where parameter like ${coreSQLpID}` returnDataB(coreSQL, resolve, reject); }); }); }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.