PTT
Submit
Submit
选择语言
正體中文
简体中文
PTT
Ajax
[问题] 同步变量接异步函数返回值
楼主:
ZAbird
(炸鸟)
2017-03-12 05:54:36
虽然这个问题有点蠢, 但是爬过相关文章都看不太懂. 目前是看到利用Promise
来解决, 但是找到的例子有点复杂不太能消化. 想请求大神帮忙.
举个最简单的例子 我今天想要做这样的事情:
var x = getValue();
function getValue(){
var temp;
setTimeout(function(){temp = 3}, 2000);
return temp
}
这时候因为执行返回时 temp 还没有被赋值, 所以x 会是undefined.
我该怎么用promise 来让我确定拿到我要得值才返回给 x 接住呢.
或者有其他技术可以实现. 不好意思, 初学js. 请指点迷津, 谢谢!
作者: dannypsnl (秦书)
2017-03-12 07:00:00
不行啊,你setTimeout立刻返回,直到它操作完成才会执行,应该是把对X设值的动作移到setTimeout的callback里面才对
楼主: ZAbird (炸鸟)
2017-03-12 07:26:00
我只是用模拟的方式表达..实际上是要完成其他很多function如果我把 var x 丢到setTimeout 里面 问题还是无解我要的是在global 的地方接到这个值所以还要return回main工作才算完成..我现在是已经用promise 解决了..但是对promise的用法观念还非常模糊, 希望有人能借由这个例子浅显的说明, 感激不尽
作者:
Qiqi
(泼泼)
2017-03-12 11:43:00
getValue要写return new Primise(...)然后就可以用x.then(...)去拿到值mdn有例子可以看
https://goo.gl/qDhLxu
x.then里面的function就是等promise里面有被resolve或reject才会执行,这就是所谓的异步
楼主: ZAbird (炸鸟)
2017-03-12 12:21:00
理解.感谢你! 衍伸一个问题, 如果我第一个异步返回要给让第二个异步来用 然后再返回去global, 这样我是要分别在第一个函式跟第二个函式都写 return new Premise然后让用第一个含式.then(function(){第二个函式})这样的写法吗?还是应该有更简洁的结构呢
作者:
vincenter
(Salut...)
2017-03-12 14:54:00
要更简洁要用async/await可以研究一下callback的进化史callback->promise->generation/yield->async/await^应该是generator想了一下突然很疑惑,异步的值真的可以传到所谓的global的地方吗?
作者: dnabossking (少狂)
2017-03-28 18:40:00
http://ptt.cc.TtCbr
继续阅读
[node] jsonrpc 的权限问题
hhashoww
Re: [问题] Node.JS 直播技术询问
s25g5d4
[问题] Node.JS 直播技术询问
herbacin
[问题] 找出table中按钮字段的哪个按钮被按下
wwe90425
[讨论] Angular2的迷思
aa1235561
[问题] React问题请教
aoksc
[讨论] 为什么台湾很少人在用Meteor?
max80713
[问题] JS有办法得知连结的服务器状态吗?
gn00386614
[问题] NodeJS Crawler behind company proxy
Big9
[问题] jQuery外挂-360度旋转产品照片展示
weizi75
Links
booklink
Contact Us: admin [ a t ] ucptt.com