我有以下表达功能:
const token = require("./auth").genToken;
const rp = require("request-promise");
const url = "https://books.zoho.com/api/v3/";
module.exports = {
async listInvoices(req, res) {
let response;
try {
const full_url = url + "invoices";
const auth = await token();
response = await rp({
url: full_url,
method: "GET",
headers: auth,
json: true
});
return res.json(response);
} catch (error) {
return res.status(400).send({ error });
}
},
async listBankTransactions(req, res) {
let response;
try {
const full_url = url + "banktransactions";
const auth = await token();
response = await rp({
url: full_url,
method: "GET",
headers: auth,
qs: req.body,
json: true
});
return res.json(response);
} catch (error) {
return res.status(400).send({ error });
}
},
async matchTransactions(req, res) {
let transactions = await module.exports.listBankTransactions(req, res);
let invoices = await module.exports.listInvoices(req, res);
}
};
它们有不同的路线,我可以给他们打电话。但是,我希望matchTransactions
函数调用listInvoices
和listBankTransactions
并将它们的响应存储在变量中,以便我可以操纵这些数据,然后返回matchTransactions
响应。>
我的代码现在是这样,listBankTransactions
返回响应而不是存储在transactions
常量中,然后listInvoices
响应中有一个异常,因为响应已经由listBankTransactions
返回。
实现我正在寻找的最佳方法是什么?
谢谢!
答案 0 :(得分:2)
我最近遇到了同样的问题,没有找到您可能在想的解决方案。 ;)我的处理方式是将函数的重复代码外包给不是中间件的外部函数,并使它们返回promise / resolved promise。也许会对您有帮助。我发现“赶上来”表示法要好得多。
const middlewareA = (req, res, next) => {
ascyncCodeOfMiddlewareA
.then(externalLogicFunction)
.then(...)
.catch(...)
}
const middlewareB = (req, res, next) => {
externalLogicFunction()
.then(...)
.catch(...)
}
const externalLogicFunction = () => {
...
return Promise.resolve(something);
}