在同步函数中调用异步函数(setinterval)后返回值
Return value in a synchronous function after calling asynchronous function (setinterval) within it
我正在Node.js上研究这个函数,具有以下要求:
- 尽可能保持代码流同步(以便易于阅读/遵循)
- 能够返回值,以便将其传递给更高级的函数。
- 如果必须使用异步函数,必须有某种方法来"阻塞"异步函数和返回语句之间的流,同时不阻塞程序和GUI。
main.js
var some = require("./some.js");
main_fn = function () {
var result = some.some_fn();
if (result == "good") // do something
};
main_fn();
some.js
exports.some_fn = function () {
var result;
var someInterval = setInterval(function () {
// output to GUI
if (condition1) {
clearInterval(someInterval);
result = "good";
} else if (condition2) {
clearInterval(someInterval);
result = "bad";
}
// else continue with interval
}, 250);
// previous way: deasync
// it will not block event loop, however it will block the GUI ("freeze" the browser)
// require("deasync").loopWhile(function () { return result === undefined; });
// result will be undefined here if no code to "block" in between
// but I need result to be either "good" or "bad"
return result;
};
从代码中可以看到,我尝试了deasync (https://github.com/abbr/deasync)。但是,这会阻塞GUI。是否有任何Node.js模块/解决方案,如deasync,允许我维护这个代码结构(尽可能),并满足我的要求?
找到一个不使用本地Node.js模块(使用C/c++代码的模块,如deasync)的解决方案会更好,因为我可能需要在未来浏览程序。然而,我很高兴听到你的任何解决方案。谢谢!
基本上不可能在不阻塞的情况下"deasync"。
"异步"意味着结果将在稍后的时间产生。"同步"意味着代码执行将立即继续。这两者根本不相配。如果一个同步操作需要等待一个异步操作完成,它必须暂停操作,直到该操作完成;这意味着它将阻止。
最友好的语法是使用Promises,而不会陷入回调的地狱。它们在某种程度上允许你编写看起来同步的代码,同时将异步回调的复杂性委托给后台。
相关文章:
- 可以't获取setInterval函数以使用javascript中的this.function_name调用另一
- 使用setInterval()函数进行图像闪烁
- 在setInterval函数之前声明时未定义对象
- 使用setInterval调用原型函数时出现问题
- setInterval函数不会更改视图中的$scope
- “单独列搜索”上的Datatables setinterval函数
- 如何使用setInterval执行函数
- setInterval可更改函数的背景
- Javascript setInterval 函数来清除自身
- setInterval调用具有未定义参数的函数
- setinterval函数,使用变量的前一个/旧值
- 如何在 setinterval 函数中访问 javascript 数组值
- 如何在 window.setInterval 中每分钟运行一次 getJSON 函数
- 在 jquery 移动中离开页面时结束 SetInterval 函数
- 我将如何在jQuery中切换setInterval函数的状态
- 在setInterval函数内部使用.call()传递参数
- Javascript 函数 setInterval() 只工作一次
- 哪一个最好在 jquery 中连续重复函数 setInterval 或回调函数
- 使用函数setinterval javascript错误使用函数
- 在同步函数中调用异步函数(setinterval)后返回值