从函数获取返回值后的Node.JS回调

时间:2018-06-22 08:05:27

标签: node.js callback

在我的main.js文件中,有这个对象:

var options = {
    foo: 'bar',
    foofoo: 'barbar',
    accountBalance: getBalance()
};

功能getBalance()在获取用户帐户资金余额的服务器上发出POST请求。返回余额后,我需要调用另一个函数myFunc(),如下所示:

var options = {
    foo: 'bar',
    foofoo: 'barbar',
    accountBalance: getBalance() //when accountBalance is returned, call myFunc() from here
};

function muFunc(){
//do something
}

getBalance函数:

var request = require('request');
function getBalance(){
        request(POSToptions, function (error, response, body) {
        if (!error && response.statusCode == 200) {
            return body.balance;
         } else {
           console.log("ERR" + body);
        }
     });  
  }

我知道我需要使用回调函数,但是我仍然无法绕过这个概念。有人可以帮我,理想情况下提供有关如何创建回调函数的说明吗?谢谢!

2 个答案:

答案 0 :(得分:0)

根据问题,我们需要使用http call对象中的一个属性(在本例中为options属性,它引用一个函数)来制作accountBalance

由于http request本质上是异步的,因此一旦请求得到处理,我们将获得回调。

我的解决方案是在options对象中添加一个属性,一旦触发回调,该属性就会被触发。

在下面的示例中,我使用了http get call,但理想情况下,任何http动词都应保持不变。

查看以下示例-

(() => {

    function getBalance() {
        //do your stuff here
        //then ajax call
        $.get('URL', (response) => {
            //call callback function in http response callback.
            options.callback(response);
        });
    }

    function callback(response) {
        console.log(response);
    }

    let options = {
        foo: 'bar',
        foofoo: 'barbar',
        accountBalance: getBalance,
        callback: callback
    };

    //make ajax call here
    options.accountBalance();

})();

我在callback中添加了另一个名为options object的属性,其中包含callback function reference

  

编辑-我已经用setTimeout函数替换了AJAX回调以模拟异步特性

(() => {

    function getBalance() {
        //do your stuff here
        //then ajax call
      setTimeout(() => {
          let response=  {
              data: "foo"
          }
          options.callback(response);
      }, 1000);
    }

    function callback(response) {
        console.log(response);
    }

    let options = {
        foo: 'bar',
        foofoo: 'barbar',
        accountBalance: getBalance,
        callback: callback
    };

    //make ajax call here
    options.accountBalance();

})();

我希望这会有所帮助:)

答案 1 :(得分:0)

在执行getBalance()之前,您的getBalance()返回

您可以使用async / await

// npm install--save request
// npm install--save request-promise

var request = require('request-promise');

var getBalance = async () {
    return await request(POSToptions);
}


const muFunc = async () => {
    //do something
    var options = {
        foo: 'bar',
        foofoo: 'barbar',
        accountBalance: await getBalance()
    };
}