Skip to content

Instantly share code, notes, and snippets.

@xicond
Last active November 27, 2015 08:19
Show Gist options
  • Save xicond/88eff3419998d91572ef to your computer and use it in GitHub Desktop.
Save xicond/88eff3419998d91572ef to your computer and use it in GitHub Desktop.
var sleep = require('sleep');
var Promise = require('promise');
function random (low, high) {
return Math.random() * (high - low) + low;
}
var task1 = new Promise(function (resolve, reject) {
var until = 900;//random(900,1000);
setTimeout(function(){
for(var i=0;i<10;i++)
console.log('query1');
resolve('query1');
},until);
});
var task2 = new Promise(function (resolve, reject) {
var until = 900;//random(900,1000);
setTimeout(function(){
for(var i=0;i<10;i++)
console.log('query2');
resolve('query2');
},until);
});
var task3 = new Promise(function (resolve, reject) {
var until = 900;//random(900,1000);
setTimeout(function(){
for(var i=0;i<10;i++)
console.log('query3');
resolve('query3');
},until);
});
Promise.all([task1,task2,task3]).then(function(queries){console.log('process all queries to output view');}).then(function(results){console.log('finish');});
setTimeout(function(){console.log('Ended with setTimeout');},1);
sleep.sleep(1);
for(var i=0;i<1000000000;i++);
console.log('EOF');
//promises async queries, reduce bottleneck
//console.log
//EOF
//Ended with setTimeout
//query2
//query2
//query2
//query2
//query2
//query2
//query2
//query2
//query2
//query2
//query3
//query3
//query3
//query3
//query3
//query3
//query3
//query3
//query3
//query3
//query1
//query1
//query1
//query1
//query1
//query1
//query1
//query1
//query1
//query1
//process all queries to output view
//finish
@hellowin
Copy link


function random (low, high) {
    return Math.random() * (high - low) + low;
}

var task1 = new Promise(function (resolve, reject) {
    var until    = random(900,1000),
        taskName = "task1";
    setTimeout(function(){
        var promises = [];
        for(var i=0;i<10;i++){
            var promise = new Promise(function(resolve2){
                var locI = JSON.stringify(i);
                setTimeout(function(){
                    console.log(taskName + " " + locI);
                    resolve2();
                },random(i,i*100));
            });
            promises.push(promise);
        }
        Promise.all(promises).then(function(){
            console.log(taskName + " done");
            resolve();
        });
    },until);
});

var task2 = new Promise(function (resolve, reject) {
    var until    = random(900,1000),
        taskName = "task2";
    setTimeout(function(){
        var promises = [];
        for(var i=0;i<10;i++){
            var promise = new Promise(function(resolve2){
                var locI = JSON.stringify(i);
                setTimeout(function(){
                    console.log(taskName + " " + locI);
                    resolve2();
                },random(i,i*100));
            });
            promises.push(promise);
        }
        Promise.all(promises).then(function(){
            console.log(taskName + " done");
            resolve();
        });
    },until);
});

var task3 = new Promise(function (resolve, reject) {
    var until    = random(900,1000),
        taskName = "task3";
    setTimeout(function(){
        var promises = [];
        for(var i=0;i<10;i++){
            var promise = new Promise(function(resolve2){
                var locI = JSON.stringify(i);
                setTimeout(function(){
                    console.log(taskName + " " + locI);
                    resolve2();
                },random(i,i*100));
            });
            promises.push(promise);
        }
        Promise.all(promises).then(function(){
            console.log(taskName + " done");
            resolve();
        });
    },until);
});

Promise.all([task1,task2,task3]).then(function(queries){console.log('process all queries to output view');}).then(function(results){console.log('finish');});

setTimeout(function(){console.log('Ended with setTimeout');},1);

for(var i=0;i<1000000000;i++);

console.log('EOF');

Itu i di for perlu di stringify karena dia mutable. Kalau gak di stringify hasilnya pasti 10.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment