首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
V2EX  ›  JavaScript

js 小白最近遇到一个关于异步回调函数的问题

  •  
  •   Begin · 162 天前 · 1014 次点击
    这是一个创建于 162 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前 在用 React 写一个大屏幕展示的项目,我把请求数据的部分抽到了另外一个文件中,但是问题来了异步请求后如何能把请求到的数据返回。 '' export function getBloodInventoryData() {

        $.post("/api/" + url + "?token=" + this.token, params, function (result) {
            if (result.success == false) {
                if (result.message == "您的 token 已超期!" || result.message == "您输入的 token 无效,请输入正确的 token !") {
                    ApiHelper.getToken();
                    this.getBloodInventoryData();
                    return;
                }
                throw new Error("1000", result.message);
            }
            var hasValue = false;
            for (var key in result.objects) {
                hasValue = true;
                break;
            }
            if (hasValue == false) {
                return;
            }
            callBackMethod(result.objects);
        }.bind(this));
    

    } '' 如上代码片段,我请回来的 result 无法 return 啊

    10 回复  |  直到 2018-04-20 11:39:12 +08:00
        1
    ituren   162 天前
    callBackMethod(result.objects);
    不是最后调用了这个回调方法么
    在这个方法里处理就好了
        2
    VAWang   162 天前
    jquery 的 AJAX 请求的参数里把 async 改成 false,就能 return 出来值了
        3
    v2xe2v   162 天前
    promise?
        4
    Begin   162 天前
    @VAWang 也就是用同步咯?
        5
    zenxds   162 天前
    return 一个 promise 对象
        6
    beginor   162 天前 via Android   ♥ 1
    看到你 id,过来支持一下,代码返回 Promise,配合 async/await 比这爽多了
        7
    duan602728596   162 天前 via iPhone
    Promise 配合 async/await,返回数据后修改 state
        8
    jasperjia   162 天前
    如果你的$是 jQuery 的话,第三个参数是回调函数,当请求成功执行,意思就是同步的(发起请求-> 请求成功 -> 执行回调函数),不用考虑异步引起的的问题。如果 result.success 和 hasValue 都不等于 false (没有 return ),callBackMethod 肯定会执行的。给出的建议:1.排查请求是否成功 2.排查 result.success 是否等于 false result.objects 是否是空对象。如果都没问题的话,那就是 callBackMethod 的问题,根据经验来说,可能状态管理有问题,最终没有刷新 state,进而没有更新 DOM。
        9
    kisnows   162 天前
    回调到了以后修改 state 的值,然后 render 函数里面从 state 里面去取就好了。
        10
    Begin   159 天前
    @jasperjia 我的想法是把值回传到 callBackMethod,但是 setState 不是在 callBackMethod 中进行的,我是想在把值回传到 callBackMethod 之后能把值 return~因为我的请求数据不在组件中,单独写在了一个 service 文件中
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2310 人在线   最高记录 3762   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 19ms · UTC 11:22 · PVG 19:22 · LAX 04:22 · JFK 07:22
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1