关于 promise 的问题:请问在这个短小函数里 then 会被执行几遍?


关于 promise 的问题:请问在这个短小函数里 then 会被执行几遍?

new Promise(function (resolve) {
    async1(resove); // 某异步函数(函数定义省略)。
    setTimout(resove, 4000); // 假如4秒钟后还不结束就强行结束。
}.then(function () { alert("hello!"); });

就算 async1() 函数在不到4秒钟的时间内就正常完成了,可是 setTimeout() 不还在计时并没有停吗?4秒钟时间一到,它是不是还会照样调用 resolve ?那么,将会看到弹出几次 "hello" 呢?

我另外的问题是:

1、假如只会弹出一次 "hello",那么可否采用这种方法来给 promise 加上时限机制(即:若在一段时限内还不结束就强行结束,否则则不干预)?

2、假如这种机制有效的话,那请问是不是用 Promise.race() 赛跑方法来实现时限机制就显得啰嗦了?(因为看到有CSDN大牛 @小平果118 写的讲解 promise 的博文里举例用到 Promise.race() 让两个 promise 赛跑的方法来实现时限机制,故有此惑。)

刚接触了解 promise,请原谅我所提问题的初浅。还望各位大侠不吝赐教,谢谢!


只会执行一遍,resolve 后就把线程转走了。

另外问题1,是可行的。

另外问题2,Promise.race方法同样是将多个Promise实例,包装成一个新的Promise实例,并接收最先变动的那个Promise的值做参数传下去。而你的举得这个例子,用问题1方法做实现应该更好一点。



相关阅读:
Vue嵌套路由失效?
php中static和abstractor有啥区别?
如何删除选中的cell中对应的行?
js弹窗验证失败
关于STUN协议中属性的一点问题
vuejs 折叠面板的展开收缩动画应该怎么实现?用vue自带的过渡效果还是css3?
关于表单页面提交信息的判断
extjs3.2 panel组件能否添加focus和blur事件
如何将全局变量i变成函数的局部变量?
vue应用嵌在微信里 ,点击微信右上角的分享其中一个页面的链接 ,怎样让用户点开来就是当前页面呢?
AngularJS路由添加controller问题
PC端API和移动端API有什么不同吗?
pycharm 如何配置 python3 的开发环境?
vue中通过this.$router.push 到当前页面,只是参数不同,页面没有重新请求数据?
vue.js2.0中set和get的问题
$.ajax 跨域 options
mysql 的IFNULL失效
webpack在安装的时候出现问题
使用websocket上传视频文件后无法播放
作用域链的问题?



快速导航

Copyright © 2016 phpStudy |