[问题] 同步变量接异步函数返回值

楼主: 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/qDhLxux.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

Links booklink

Contact Us: admin [ a t ] ucptt.com