【发布时间】:2018-11-04 04:20:44
【问题描述】:
我想创建一个将回调函数入队的函数,但在该回调出队并执行之前不会返回。
function executeCallback(callback) {
if( shouldEnqueue ) {
enqueue(callback);
// awaits execution of callback
// return executed callback's return value
} else {
return callback()
}
}
实际功能如下。当需要订单时,我们将检查是否缓存了最近的订单。如果我们没有最近的订单,我们会将请求排队以获取新的订单簿。一旦被请求,我们将返回订单簿。实际代码如下所示:
const axios = require("axios");
const moment = require("moment");
const { promisify } = require("util");
const orderbookQueue = [];
const orderbookUpdateTime = {};
async function requestOrderbook(pair) {
const response = await axios.post("https://api.kraken.com/0/public/Depth", {
pair
});
orderbookUpdateTime[pair] = +moment();
return response.data.result[pair];
}
async function getOrderbook(pair, currentTime) {
if (
orderbookUpdateTime[pair] &&
currentTime - orderbookUpdateTime[pair] > 60000
) {
const requestOrderbookAsync = promisify(requestOrderbook);
orderbookQueue.push(() => requestOrderbookAsync(pair));
// how to I return the result of requestOrderbookAsync when it has been called ?
}
return requestOrderbook(pair);
}
const queueExecutor = function queueExecutor() {
while (orderbookQueue.length) {
orderbookQueue[0]();
orderbookQueue.shift();
}
};
【问题讨论】:
-
创建一个完成后解析的承诺。
-
我无法弄清楚如何访问已解决的承诺。你能用代码或伪代码告诉我你的意思吗?
-
向我们展示您的代码。
-
好的,我编辑了问题以包含真实代码。
标签: javascript node.js asynchronous callback queue