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

JS 闭包如何传参的问题

  •  
  •   eabet · 2019-12-30 19:30:45 +08:00 · 3259 次点击
    这是一个创建于 1789 天前的主题,其中的信息可能已经有所发展或是发生改变。

    getInstallInfo () { var openinstall = api.require('openinstall'); openinstall.getInstall({ timeout:10 },function(ret, err){ alert(JSON.stringify(ret)); }); }

    getInstallInfo();

    代码如上,要怎么把 ret 的值传出来呢?

    4 条回复    2019-12-31 08:37:46 +08:00
    lbyo
        1
    lbyo  
       2019-12-30 19:40:48 +08:00
    return
    xiaoming1992
        2
    xiaoming1992  
       2019-12-30 19:46:31 +08:00   ❤️ 2
    你这都写的什么东西,搞个 markdown 语法,至少分个行吧?

    回复里面好像用不了 markdown,你只能将就着看了

    ```
    function getInstallInfo() {
    return new Promise((resolve, reject) => {
    const openinstall = api.require('openinstall');
    openinstall.getInstall({ timeout:10 }, (ret, err) => {
    if (err) {
    reject(err)
    } else {
    resolve(ret)
    }
    });
    })
    }

    getInstallInfo()
    .then((val) => {
    alert(JSON.stringify(val))
    })
    .catch((err) => {
    console.error(err)
    })
    ```
    虽然代码是这样的,但是这些东西你都不能直接用,因为 Promise 有兼容性问题,箭头函数需要转译,所以,你再看看这方面(webpack + babel)的东西吧。
    ochatokori
        3
    ochatokori  
       2019-12-30 21:02:07 +08:00 via Android   ❤️ 2
    2 楼的 promise 箭头函数现在已经可以直接在 chrome 直接跑了了
    如果你想要兼容又不想搞 babel
    省事的就是给 getInstallInfo 传个 callback 方法,然后在你 alert 的地方调用这个方法把 ret 传给 callback,然后把使用 ret 的逻辑全写到 callback 里面(著名回调地狱)
    KuroNekoFan
        4
    KuroNekoFan  
       2019-12-31 08:37:46 +08:00 via iPhone
    trigger 一个 custom event 也还行
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2794 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 14:15 · PVG 22:15 · LAX 06:15 · JFK 09:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.