js 异步 http 请求的返回值,如何赋值给一个变量?

2020-10-24 21:56:08 +08:00
 css3

异步编程新新新新手, 不应该说编程新手

这几日在用 jsbox 构建一个自己的小工具,卡在了 http 异步请求这一块,请求返回值死活无法赋值给一个全局的变量给其他地方使用;

了解了异步的一些基础用法,有通过 then 获取的,有通过定义 async 函数获取的,还有回调函数获取的 但发现有个特点就是拿到的返回值,作用域均仍在内部,拿不出来这个返回值

// 调用 v 站的 api 例子,获取最新主题
function test() {
   var result = undefined
   let url = "https://www.v2ex.com/api/topics/latest.json"
   return $http.get({
     url: url
   }).then(resp => {
     var data = resp.data[0]['title']
     return data
   })
}
//调用的获取返回值
async function getRet(){
    var ret = await test();
    console.log(ret);
    return ret;
}

getRet()  // 拿不到 ret 的值
3835 次点击
所在节点    程序员
25 条回复
css3
2020-10-27 15:48:55 +08:00
css3
2020-10-27 15:51:00 +08:00
@vision1900
@aaronlam
@kwrush
@Doracis
@Arrowing
@shenyu1996
大佬帮忙看一下,我 append 了原始需求
Arrowing
2020-10-27 17:34:20 +08:00
```javascript
function test() {
var result = undefined
let url = "https://www.v2ex.com/api/topics/latest.json"
let res = $.get({ // 假设支持 jQuery,V2ex 控制台下可测试
url: url,
async: false // 使用同步请求
})
return res.responseJSON[0]['title']
}
```
css3
2020-10-27 21:21:08 +08:00
@Arrowing jsbox 中,加了 async: false,拿到的 res.responseJSON[0]['title'] ,还是个 Pormise
css3
2020-10-27 21:50:34 +08:00
罢了罢了,解决不了放弃了

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

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

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

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

© 2021 V2EX