Giter Club home page Giter Club logo

Comments (2)

caolan avatar caolan commented on May 18, 2024

Yes, this the way JavaScript works when passing around references to functions. When calling a function, the context is essentially what comes before the '.', so calling test2 as myTest.test2(cb) would work, but doing:

var fn = myTest.test2;
fn(cb);

won't work. async.js has no knowledge of the myTest object, only the value of myTest.test2. You'll need to replace myTest.test2 in the async.series call with a function which calls it with the correct context like this:

async.series([
    test1,
    function (cb) {
        myTest.test2(cb);
    }
], ....

That will mean test2 is called with the correct value for this. Its possible to avoid the use of 'this' in some circumstances by using a closure. By using closures and a more functional style you can mostly avoid this headache.

Example using closure:

var MyTest = function(){
    var that = this;
    this.test2 = function (cb) {
        console.log('test2');
        console.log(that);
        setTimeout(cb,200);
    }
};

var myTest = new MyTest();

This stores a reference to 'this' in the variable 'that', which will stay in scope for the function test2, and is accessible from that function no matter how you call it later on.

Hope that helps

from async.

szayat avatar szayat commented on May 18, 2024

thanks for explanation :)
The thing is that the code defining MyTest.test2 is from another module (node-couchdb). I actually wrapped the calls in anonymous functions as in your example and It works of course. thank you.

from async.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.