[英]nodejs callback in a function - newbie query
我具有以下功能,可从html页提取一些变量并通过运行正常的i / o进行发布-但我想添加一个回调以确保我可以确定此功能是否已完全完成。
请告知我如何纯粹出于此目的添加回调-因为我对回调没有任何其他需求。
function RunScrapingPositions() {
status = false;
myhttp.get('https://example.com/PB.jsp',
function (_html) {
if (_html && _html.length > 10) {
news.positions = {};
$ = cheerio.load(_html);
$('tr[id^="TR"]').each(function () {
status = true;
var symbol = $('td:nth-child(3)', this).text().trim();
var objob = {
'NQ': parseInt($('td:nth-child(11)', this).text().trim()),
};
var post = {
'symbol': symbol,
'nq': objob.NQ
};
connection.query('INSERT INTO NP SET ?', post, function (err,result){
if (err)
{console.log("NP sql insert error : " +symbol);}
else {
console.log("Posn - Step 3B - Position data inserted into NP Table : " +symbol);
}
});
var objstock = news.analysis[symbol];
if (typeof objstock!='undefined') {
objstock.NQ = objob.NQ;
news.positions[symbol] = objob;
news.analysis[symbol] = objstock;
if (status) {
console.log('Posn - Step 4 - Positions data pushed to page')
io.emit('news', news);
}
}
else
{
console.log('Posn - Step 4A - Position symbol not found');
}
});
if (timerPositions) {
clearTimeout(timerPositions);
}
console.log('Posn - Step 5 - setTimer RunScrapingPositions:' + config.DelayExtractPositions);
timerPositions = setTimeout(RunScrapingPositions, config.DelayExtractPositions);
}
});
}
您可以通过以下步骤实现回调:
接受回调函数作为参数:
function RunScrapingPositions(callbackDone) {
然后,在调用该函数的地方传递该函数。 您可以为此使用bind
。 在您已完成所有操作的条件下,请调用它:
function RunScrapingPositions(callbackDone) {
status = false;
myhttp.get('https://example.com/PB.jsp', function (_html) {
if (_html && _html.length > 10) {
// ...
// pass the callback function on to the deferred call:
timerPositions = setTimeout(
RunScrapingPositions.bind(null, callbackDone),
config.DelayExtractPositions
);
} else {
// all is done, call the callback function:
callbackDone();
}
});
}
您还可以使用jQuery的自定义事件工具$(document).trigger({eventName},obj或参数列表)来触发“事件”。 您可以编写代码以通过$(document).on({eventName},function(someArgsThatYouPass){在这里做些事情。...})侦听该事件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.