异步编程,回调函数
程序员文章站
2024-01-28 09:35:46
...
9.异步编程
回调函数
不成立的情况1:
function add(x, y) {
console.log(1)
setTimeout(function () {
console.log(2)
var ret = x + y
return ret
}, 1000)
console.log(3)
//到这里执行就结束了,不会等到前面的定时器,所以直接返回了默认值undefined
}
console.log(add(10, 20))
//1,3,undefined,2
不成立的情况2:
function add(x, y) {
var ret
console.log(1)
setTimeout(function () {
console.log(2)
ret = x + y
}, 1000)
console.log(3)
return ret
//到这里执行就结束了,不会等到前面的定时器,所以直接返回了默认值undefined
}
console.log(add(10, 20))
//1,3,undefined,2
成立的情况(麻烦):
var ret
function add(x, y) {
console.log(1)
setTimeout(function () {
console.log(2)
ret = x + y
}, 1000)
}
add(10, 20)
setTimeout(function(){
console.log(ret)
},1000)
//1,2,30要等一秒才会出来 add在定时函数之前
回调函数:
function add(x, y, callback) {
console.log(1)
//setTimeout异步操作
setTimeout(function () {
var ret = x + y
callback(ret)
}, 1000)
}
add(10, 20, function (ret) {
console.log(ret)
})
注意:凡是需要得到一个函数内部异步操作的结果
setTimeout readFile writeFile ajax
这种情况必须通过:回调函数
基于原生XMLHttpRequest封装get方法:
function get(url, callback) {
var oReq = new XMLHttpRequest()
// 当请求加载成功之后要调用指定的函数
oReq.onload = function () {
// 我现在需要得到这里的 oReq.responseText
callback(oReq.responseText)
}
oReq.open("get", url, true)
oReq.send()
}
get('data.json', function (data) {
console.log(data)
})