作为一个简单的示例程序,我有一个节点脚本可以连续ping服务器,并希望该程序长时间运行。
该程序设置为ping函数,返回一个promise对象。根据ping是否成功或失败,该promise将被解析或拒绝。
我希望在循环中运行此函数,因此无论ping是否成功,下一个ping都将在一定时间之后触发,即在上一个请求解决后。
问题不在于任务本身,而是我担心我的实现方式。我认为它最终会导致堆栈溢出。
以下是一些代码以查看正在发生的情况:
该程序设置为ping函数,返回一个promise对象。根据ping是否成功或失败,该promise将被解析或拒绝。
我希望在循环中运行此函数,因此无论ping是否成功,下一个ping都将在一定时间之后触发,即在上一个请求解决后。
问题不在于任务本身,而是我担心我的实现方式。我认为它最终会导致堆栈溢出。
以下是一些代码以查看正在发生的情况:
function doPing(host) {
// returns a promise object.
}
function doEvery(ms, callback, callbackArgs) {
setTimeout(function() {
callback.apply(null, callbackArgs)
.always(function() {
doEvery(ms, callback, callbackArgs);
});
}, ms);
}
doEvery(1000, doPing, [host]);
我试图限制代码仅反映以下问题的范围:
这最终会导致堆栈溢出吗? 在使用 promises 时,是否有一种模式可以防止回调循环过程中的溢出?