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

2018-04-17 14:25:27 +08:00
 Begin

目前 在用 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 啊

3694 次点击
所在节点    JavaScript
10 条回复
ituren
2018-04-17 14:34:02 +08:00
callBackMethod(result.objects);
不是最后调用了这个回调方法么
在这个方法里处理就好了
VAWang
2018-04-17 14:40:19 +08:00
jquery 的 AJAX 请求的参数里把 async 改成 false,就能 return 出来值了
v2xe2v
2018-04-17 14:40:29 +08:00
promise?
Begin
2018-04-17 14:46:06 +08:00
@VAWang 也就是用同步咯?
zenxds
2018-04-17 14:55:12 +08:00
return 一个 promise 对象
beginor
2018-04-17 14:55:21 +08:00
看到你 id,过来支持一下,代码返回 Promise,配合 async/await 比这爽多了
duan602728596
2018-04-17 15:31:50 +08:00
Promise 配合 async/await,返回数据后修改 state
jasperjia
2018-04-17 16:48:44 +08:00
如果你的$是 jQuery 的话,第三个参数是回调函数,当请求成功执行,意思就是同步的(发起请求-> 请求成功 -> 执行回调函数),不用考虑异步引起的的问题。如果 result.success 和 hasValue 都不等于 false (没有 return ),callBackMethod 肯定会执行的。给出的建议:1.排查请求是否成功 2.排查 result.success 是否等于 false result.objects 是否是空对象。如果都没问题的话,那就是 callBackMethod 的问题,根据经验来说,可能状态管理有问题,最终没有刷新 state,进而没有更新 DOM。
kisnows
2018-04-17 16:56:36 +08:00
回调到了以后修改 state 的值,然后 render 函数里面从 state 里面去取就好了。
Begin
2018-04-20 11:39:12 +08:00
@jasperjia 我的想法是把值回传到 callBackMethod,但是 setState 不是在 callBackMethod 中进行的,我是想在把值回传到 callBackMethod 之后能把值 return~因为我的请求数据不在组件中,单独写在了一个 service 文件中

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

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

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

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

© 2021 V2EX