V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
css3
V2EX  ›  程序员

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

  •  
  •   css3 · 2020-05-14 19:13:44 +08:00 · 1870 次点击
    这是一个创建于 1655 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    5 条回复    2020-05-14 23:13:56 +08:00
    jugelizi
        1
    jugelizi  
       2020-05-14 19:26:38 +08:00 via iPhone
    基础知识 js 按顺序执行 但 ajax 是异步的
    yuanfnadi
        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)
    })
    css3
        3
    css3  
    OP
       2020-05-14 19:40:29 +08:00
    @jugelizi 初学😁

    @yuanfnadi 老哥,这样确实 ok 了。现在有个需求就是,我有个 test2(result)函数,result 是 test()函数的返回值,怎么把 test()返回值直接赋值给一个变量 ret 呢,我好在 test2(ret)中直接入参
    Axel2
        4
    Axel2  
       2020-05-14 19:47:46 +08:00 via iPhone
    @css3 哇你稍微看下 js 吧,await 啊,阻塞异步
    beastk
        5
    beastk  
       2020-05-14 23:13:56 +08:00 via iPhone
    要异步的话,需要做个循环监视器取值后再清楚监视器
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1857 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 16:20 · PVG 00:20 · LAX 08:20 · JFK 11:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.