我正在使用Node.js上的这个函数,具有以下要求:
这是我的代码:
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)的情况下找到解决方案会更好,因为我可能需要在将来对程序进行浏览。但是,我很高兴听到你的任何解决方案。谢谢!
答案 0 :(得分:0)
根本不可能在没有阻止的情况下“取消同步”。
“异步”表示结果将在稍后的某个时间生成 。 “同步”意味着代码执行将立即继续。这两个根本不在一起。如果同步操作需要等待异步操作的完成,则必须暂停操作,直到操作完成为止;这意味着它将阻止。
最友好的语法没有转入回调地狱就是使用Promises。它们允许您编写同步代码,同时将异步回调的复杂性委托给后台。