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

如何在需要同步返回数据的接口中返回一个需要异步获取的数据

  •  
  •   des · 2017-03-02 08:20:50 +08:00 via Android · 3756 次点击
    这是一个创建于 2828 天前的主题,其中的信息可能已经有所发展或是发生改变。
    a 、获得数据后,再去启动应用 /插件(明显只适合初始化数据)
    b 、预先返回一个空对象,后续再插入
    c 、魔改,使其支持 promise 或者再一个回调
    d 、实现一个协程(不想吐槽了)

    就没有更好的方法了吗?
    8 条回复    2017-03-03 13:19:03 +08:00
    MinonHeart
        1
    MinonHeart  
       2017-03-02 10:44:28 +08:00
    async
    await
    des
        2
    des  
    OP
       2017-03-02 12:57:10 +08:00 via Android
    @MinonHeart 可惜需要编译,不知道能不能编译到 es5
    Mikewu
        3
    Mikewu  
       2017-03-02 13:14:05 +08:00
    es5 的话, setTimeout 递归回调吧
    duan602728596
        4
    duan602728596  
       2017-03-02 15:26:28 +08:00 via iPhone
    能够编译到 es5 ,不过需要 regenerator-runtime ( npm 下载 babel-polyfill ,里面有这个库)兼容 geneator 函数。
    native-promise-only 兼容 Promise 。
    CosimoZi
        5
    CosimoZi  
       2017-03-02 15:30:24 +08:00
    刚好也遇到这个问题,而且我是需要同步返回数据的接口中需要多个异步获取的参数.希望有不需要编译的原生解决方法..
    des
        6
    des  
    OP
       2017-03-02 18:22:00 +08:00 via Android
    @CosimoZi 目前看来 a 和 b 是最好的方法了,如果可以的话。
    des
        7
    des  
    OP
       2017-03-02 18:36:55 +08:00 via Android
    @Mikewu 求问 setTimeout 怎么实现?
    JamesRuan
        8
    JamesRuan  
       2017-03-03 13:19:03 +08:00
    异步逻辑是个 Monad ,不可能放在同步逻辑内执行的。
    最简单的方法就是接口改成返回 Promise 。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2450 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 16:10 · PVG 00:10 · LAX 08:10 · JFK 11:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.