簡體   English   中英

使用promise將一個NodeJS module.export函數的結果傳遞給另一個NodeJS module.export函數

[英]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 ,您呼叫都returnDataresolve 刪除立即的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()同步返回一個值。 它做不到,它返回一個承諾。 您需要使用thenawait將其余代碼鏈接到該代碼。 另外,您還應使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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM