var Q = require('q');
function _o(msg){console.log(msg);}
function main(){
var obj1 = {
var1: 1,
func1: function(callback){_o('obj1.func1, var1 = ' + this.var1); callback(null, this.var1);}
};
var obj2 = {
var2: 2,
func2: function(callback){_o('obj2.func2, var2 = ' + this.var2); callback(null, this.var2);},
func3: function(param, callback){_o('obj2.func3, param = ' + param); callback(param, null);}
};
Q.ninvoke(obj1, 'func1').
then((rslt)=>{_o('success, rslt = ' + rslt); return Q.ninvoke(obj2, 'func2'); }, (err)=>{_o('fail, err = ' + err)}).
then((rslt)=>{_o('success, rslt = ' + rslt); return Q.ninvoke(obj2, 'func3', 'param1');}, (err)=>{_o('fail, err = ' + err)}).
then((rslt)=>{_o('success, rslt = ' + rslt); }, (err)=>{_o('fail, err = ' + err)});
}
main();