JS 闭包如何传参的问题

2019-12-30 19:30:45 +08:00
 eabet

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

getInstallInfo();

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

3267 次点击
所在节点    JavaScript
4 条回复
lbyo
2019-12-30 19:40:48 +08:00
return
xiaoming1992
2019-12-30 19:46:31 +08:00
你这都写的什么东西,搞个 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
2019-12-30 21:02:07 +08:00
2 楼的 promise 箭头函数现在已经可以直接在 chrome 直接跑了了
如果你想要兼容又不想搞 babel
省事的就是给 getInstallInfo 传个 callback 方法,然后在你 alert 的地方调用这个方法把 ret 传给 callback,然后把使用 ret 的逻辑全写到 callback 里面(著名回调地狱)
KuroNekoFan
2019-12-31 08:37:46 +08:00
trigger 一个 custom event 也还行

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

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

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

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

© 2021 V2EX