在我的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);
}
});
}
我知道我需要使用回调函数,但是我仍然无法绕过这个概念。有人可以帮我,理想情况下提供有关如何创建回调函数的说明吗?谢谢!
答案 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()
};
}