刚开始用 jsbox,今天遇到了这么个问题
function test() {
var result = ""
url = "https://www.v2ex.com/api/topics/latest.json"
$http.get({
url: url,
handler: function (resp) {
var data = resp.data[0]['title']
console.log(data) // Synchronized 的轻量级锁
result = data
}
})
return result
}
ret = test()
console.log("test 的返回值是"+ ret)
// 执行结果
"test 的返回值是 undefined"
"Synchronized 的轻量级锁
执行代码,输出的顺序是(为什么是先执行 console.log(),后调用的 test 函数?? 导致 console 的时候,还没拿到函数调用结果 ),为什么 test 函数 return 出来的的 result 是 undefined, 假如我下一个函数依赖于 test 的返回值,怎么处理?
1
jugelizi 2020-05-14 19:26:38 +08:00 via iPhone
基础知识 js 按顺序执行 但 ajax 是异步的
|
2
yuanfnadi 2020-05-14 19:29:18 +08:00
function test() {
url = "https://www.v2ex.com/api/topics/latest.json" return new Promise(r => { $http.get({ url: url, handler: function (resp) { var data = resp.data[0]['title'] r(data) } }) }) } test().then(result => { console.log("test 的返回值是" + result) }) |
3
css3 OP |
5
beastk 2020-05-14 23:13:56 +08:00 via iPhone
要异步的话,需要做个循环监视器取值后再清楚监视器
|