如何保证项目中其中一个setinterval()比其他setouttime()先执行。

去去丶 2020-05-29 07:51:17
公司一个功能,是放在setouttime()中执行的,setouttime(fn(),0),然后现在需要从其他厂家获取一个参数key,获取key的方法却也是一个异步延迟,setinterval(getKey(),50)。 怎么保证先获取到这个key,再执行执行fn()。 首先不能将fn()放入getKey()中,求大佬们解答。
...全文
770 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
浴火_凤凰 2020-07-02
  • 打赏
  • 举报
回复
为什么不能将fn()放入getKey()??这是最简单的回调了 这个不行的话 还可以看看 promise 获取可以从业务层面修改一下代码逻辑
chinaskysun 2020-06-15
  • 打赏
  • 举报
回复
fecth("url").then(res=>{ //res是获取到的内容,通过text(),json()处理获取到的key //这里你可以理解为 你的 getKey() return res.text() //上面的这里有个错误 }).then(key=>{ //这里就是你的fn() })
chinaskysun 2020-06-15
  • 打赏
  • 举报
回复
fecth("url").then(res=>{ //res是获取到的内容,通过text(),json()处理获取到的key //这里你可以理解为 你的 getKey() return key }).then(key=>{ //这里就是你的fn() })
「零一」 2020-06-07
  • 打赏
  • 举报
回复
这个很简单的,使用Promise就好了,可以使两段逻辑代码分开并且美观,你可以私信我,我教你
帅凯凯 2020-06-03
  • 打赏
  • 举报
回复
要我就定义一个全局变量, getKey之后改一下, fn()里判断全局变量改变了才继续执行
去去丶 2020-06-01
  • 打赏
  • 举报
回复
引用 12 楼 風灬雲的回复:
[quote=引用 10 楼 去去丶 的回复:] [quote=引用 5 楼 風灬雲的回复:]把setouttime() 也改成setinterval呗, 判断 getkey有没有执行,没有就return 执行了 就执行fn 然后清除定时器;两个异步 还要互相不干预,只能这样轮询
问题就是怎么固定先执行getKey()再执行fn(),geyKey是厂家提供的方法,fn是公司底层封装的方法。[/quote] 你fn 不是自己写的逻辑吗 getKey() 执行的结果 你总能判断吧? 人家用 setinterval 你也用setinterval判断 行不通吗?[/quote] 这确实是个思路
風灬雲 2020-06-01
  • 打赏
  • 举报
回复
引用 10 楼 去去丶 的回复:
[quote=引用 5 楼 風灬雲的回复:]把setouttime() 也改成setinterval呗, 判断 getkey有没有执行,没有就return 执行了 就执行fn 然后清除定时器;两个异步 还要互相不干预,只能这样轮询
问题就是怎么固定先执行getKey()再执行fn(),geyKey是厂家提供的方法,fn是公司底层封装的方法。[/quote] 你fn 不是自己写的逻辑吗 getKey() 执行的结果 你总能判断吧? 人家用 setinterval 你也用setinterval判断 行不通吗?
_mervyn 2020-06-01
  • 打赏
  • 举报
回复
引用 11 楼 去去丶 的回复:
就是说啊,key是厂家提供的一个u盘,然后他给了我一套获取u盘里一个序列号的js方法,然后我发现这个方法居然是用setinterval间隔获取,获取成功一次后就cleansetinterval(),我都无语了。
听你这么说,你的意思是你都没法判断getKey的执行结果啊。你最终如何拿到key值?? 拿到了再fn()啊
去去丶 2020-05-30
  • 打赏
  • 举报
回复
引用 6 楼 jio可的回复:
为何不用promise呢?就算用定时器也不能保证能拿到数据,网络不好肯定不会在规定时间返回数据。50毫秒拿一次这个有问题吧,一般的http请求都很难在50ms响应数据 getkey响应以后再执行fn,根本不需要定时器 getkey一直在变?为什么要写setinterval多次获取?
就是说啊,key是厂家提供的一个u盘,然后他给了我一套获取u盘里一个序列号的js方法,然后我发现这个方法居然是用setinterval间隔获取,获取成功一次后就cleansetinterval(),我都无语了。
去去丶 2020-05-30
  • 打赏
  • 举报
回复
引用 5 楼 風灬雲的回复:
把setouttime() 也改成setinterval呗, 判断 getkey有没有执行,没有就return 执行了 就执行fn 然后清除定时器;两个异步 还要互相不干预,只能这样轮询
问题就是怎么固定先执行getKey()再执行fn(),geyKey是厂家提供的方法,fn是公司底层封装的方法。
去去丶 2020-05-29
  • 打赏
  • 举报
回复
引用 2 楼 console.log( )的回复:
说需求,不一定要使用这俩
需求是这样的,我们公司买了一个令牌key,厂家提供了一套js代码获取这个key,而这套代码里就是用setinterval()定时获取key。
sha虫剂 2020-05-29
  • 打赏
  • 举报
回复
用定时器,key是在一直变换吗,如果只是一个异步,可以像楼上说的用promise也可以直接用新增的async 和await等待拿到key再执行settimeout里面的函数 如果是多次请求获取了再执行,可以声明一个变量,当拿到key改变变量的状态,通过判断变量的状态执行settiemeout
jio可 2020-05-29
  • 打赏
  • 举报
回复
如果出现网路延时,你会把厂家的api搞崩的。延时个10秒就会堆积几百个请求一下子发过去。
jio可 2020-05-29
  • 打赏
  • 举报
回复
为何不用promise呢?就算用定时器也不能保证能拿到数据,网络不好肯定不会在规定时间返回数据。50毫秒拿一次这个有问题吧,一般的http请求都很难在50ms响应数据 getkey响应以后再执行fn,根本不需要定时器 getkey一直在变?为什么要写setinterval多次获取?
風灬雲 2020-05-29
  • 打赏
  • 举报
回复
把setouttime() 也改成setinterval呗, 判断 getkey有没有执行,没有就return 执行了 就执行fn 然后清除定时器;两个异步 还要互相不干预,只能这样轮询
潇湘忆梦 2020-05-29
  • 打赏
  • 举报
回复
超时调用:setTimeout(表达式,延迟时间) 在页面载入完成之后 延迟指定时间后去执行一次表达式 间歇调用:setInterval(表达式,毫秒) 页面载入完成之后每隔毫秒 执行一次 再次,你要不要考虑使用Promise 对象试一下
Hello World, 2020-05-29
  • 打赏
  • 举报
回复
“setoutime()和seiinterval()都是异步宏”这个是不正确的,两个都只是定时去执行一段代码而已。

getkey()总要做点什么吧,如果你不能修改它的话可以监视它带来的改变
console.log( ) 2020-05-29
  • 打赏
  • 举报
回复
说需求,不一定要使用这俩
去去丶 2020-05-29
  • 打赏
  • 举报
回复
我了解的,setoutime()和seiinterval()都是异步宏,它们的执行顺序不确定,有可能这个先执行,有可能那个先执行。

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧