javascript - how to create a custom asynchronous function in node.js -


ii'm trying like.

function fun1(){    for(var j=0;j<20;j++)    {      var n = j;      console.log("i= "+n);    }  }  function fun2()  {    console.log("in callback");  }      fun1();  fun2();

its working fine till , got output expected.

but, want call function fun1() , fun2() asynchronously means fun2() call before fun1(), b'coz fun1() take time complete execution compare fun2().

how can achieve this, node.js provide asynchronous function, defined function can asynchronous or can make them according our need.

there multiple ways achieve in javascript (not node-specific, there modules make life easier):


callbacks

they continuations , shame developers bothered handling them manually (compilers used themselves). work:

function callee(callback) {    settimeout(function() {      callback(null, 'finished!');    }, 2000);  }    function caller() {    document.write('started!');    callee(function(err, result) {      document.write(result);    });  }    caller();

it common in node environment indicate errors first parameter of callback (like callback(new error("something wrong!"))).


promises

as callbacks ugly when nested (imagine 10-20 of them, you'd screwed debugging this), idea of promises came up. might know them futures java. built-in es6, , can use them beforehand in node environment npm promise -- many client-side frameworks (e.g. jquery, angularjs) have own implementations. there q.

var promise = require('promise');    function callee() {    return new promise(function(resolve, reject) {      settimeout(function() {        resolve('finished!');      }, 1000);    });  }    function caller() {    document.write('started!');    callee().then(function(result) {      document.write(result);    });  }    caller();


generators

es6 has generators. might know them python.

they provide asynchronity well, yield new values once computed.

i recommend reading learn es2015 more information on that.

my personal opinion never ever use generators interfere heavily promises , make debugging hard.


async/await

es7 make life whole lot easier async/await. can function performed asynchronously , want await result (once in async function). es7 async functions start read on that. it's like

async function callee() {    return (() => {      return new promise((resolve, reject) => {        settimeout(() => resolve('finished!'), 1000);      })    })();  }    async function caller() {    document.write('started!');    document.write(await callee());  }    // global async wrapper  (async function() {    caller();  })();


Comments

Popular posts from this blog

java - UnknownEntityTypeException: Unable to locate persister (Hibernate 5.0) -

python - ValueError: empty vocabulary; perhaps the documents only contain stop words -

ubuntu - collect2: fatal error: ld terminated with signal 9 [Killed] -