jsbox 进行 http 请求,怎么拿出 respone 返回体?

2020-05-14 19:13:44 +08:00
 css3

刚开始用 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 的返回值,怎么处理?

1893 次点击
所在节点    程序员
5 条回复
jugelizi
2020-05-14 19:26:38 +08:00
基础知识 js 按顺序执行 但 ajax 是异步的
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)
})
css3
2020-05-14 19:40:29 +08:00
@jugelizi 初学😁

@yuanfnadi 老哥,这样确实 ok 了。现在有个需求就是,我有个 test2(result)函数,result 是 test()函数的返回值,怎么把 test()返回值直接赋值给一个变量 ret 呢,我好在 test2(ret)中直接入参
Axel2
2020-05-14 19:47:46 +08:00
@css3 哇你稍微看下 js 吧,await 啊,阻塞异步
beastk
2020-05-14 23:13:56 +08:00
要异步的话,需要做个循环监视器取值后再清楚监视器

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/671753

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX