function deasync(fn) { return function() { var done = false; var args = Array.prototype.slice.apply(arguments).concat(cb); var err; var res; fn.apply(this, args); module.exports.loopWhile(function(){return !done;}); if (err) throw err; return res; function cb(e, r) { err = e; res = r; done = true; } } }
n/a
loopWhile = function (pred){ while(pred()){ process._tickDomainCallback(); if(pred()) binding.run(); } }
...
```javascript
var done = false;
var data;
asyncFunction(p1,function cb(res){
data = res;
done = true;
});
require('deasync').loopWhile(function(){return !done;});
// data is now populated
```
* Sleep (a wrapper of setTimeout)
```javascript
function SyncFunction(){
...
runLoopOnce = function (){ process._tickDomainCallback(); binding.run(); }
n/a
sleep = function () { var done = false; var args = Array.prototype.slice.apply(arguments).concat(cb); var err; var res; fn.apply(this, args); module.exports.loopWhile(function(){return !done;}); if (err) throw err; return res; function cb(e, r) { err = e; res = r; done = true; } }
...
```javascript
function SyncFunction(){
var ret;
setTimeout(function(){
ret = "hello";
},3000);
while(ret === undefined) {
require('deasync').sleep(100);
}
// returns hello with sleep; undefined without
return ret;
}
```
## Installation
...