标签: settimeout

如何在node.js中实现setTimeout

我想知道是否有人知道如何在node.js中实现setTimeout.我相信我已经读过某个地方,这不是V8的一部分.我很快就试图找到实现,但是在源代码中找不到它(BIG).我举例说明了这个timers.js文件,然后例如链接到timer_wrap.cc.但是这些文件并没有完全回答我的所有问题.

  • V8有setTimeout实施吗?我想从源头上也可以得到答案.
  • 如何setTimeout实施?javascript还是原生或两者兼而有之?来自timers.js我假设两者都有:

    var Timer = process.binding('timer_wrap').Timer;`
    
    Run Code Online (Sandbox Code Playgroud)
  • 添加多个计时器(setTimeout)时,node.js如何知道首先执行哪个?它是否将所有计时器添加到集合中(已排序)?如果它被排序,那么找到需要执行的超时是O(1)和O(log n)插入?但是再次在timers.js中我看到他们使用链表?

  • 但是再添加很多计时器根本不是问题?
  • 执行此脚本时:

    var x = new Array(1000),
        len = x.length;
    
    /**
     * Returns a random integer between min and max
     * Using Math.round() will give you a non-uniform distribution!
     */
    function getRandomInt (min, max) {
        return Math.floor(Math.random() * (max - min + 1)) + min;
    }
    
    var y = 0;
    
    for (var i = 0; i < len; i++) {
        var …
    Run Code Online (Sandbox Code Playgroud)

settimeout node.js

24
推荐指数
2
解决办法
6925
查看次数

setTimeout在forEach中没有工作

我有一个调用函数的forEach.每次调用之间都需要有延迟.我把它放在forEach里面的setTimeout里面.第一次等待后不遵守超时.相反,它等待一次,然后立即运行.我将超时设置为5秒,我正在使用控制台进行确认.5秒等待,然后几个foobar控制台同时记录.

为什么我会出现这种行为?

var index = 0;
json.objects.forEach(function(obj) {
    setTimeout(function(){
        console.log('foobar');
        self.insertDesignJsonObject(obj, index);
    }, 5000);
});
Run Code Online (Sandbox Code Playgroud)

javascript foreach function settimeout

24
推荐指数
2
解决办法
2万
查看次数

是否有充分的理由将字符串传递给setTimeout?

我们都知道将字符串传递给setTimeout(或setInterval)是邪恶的,因为它在全局范围内运行,有性能问题,如果你注入任何参数等可能是不安全的.所以这样做肯定是不赞成的:

setTimeout('doSomething(someVar)', 10000);
Run Code Online (Sandbox Code Playgroud)

赞成这个:

setTimeout(function() {
    doSomething(someVar);
}, 10000);
Run Code Online (Sandbox Code Playgroud)

我的问题是:有没有理由去做前者?它是有史以来最好?如果不是,为什么甚至允许?

我想到的唯一场景是想要使用存在于全局范围中但在本地范围内被覆盖的函数或变量.这听起来像是糟糕的代码设计,但是......

javascript settimeout

22
推荐指数
2
解决办法
6239
查看次数

setTimeout Internet Explorer

我在MSIE中有以下javascript:

setTimeout(myFunction, 1000, param );
Run Code Online (Sandbox Code Playgroud)

这似乎适用于除Internet Explorer之外的所有浏览器.param只是没有转发到该函数.看看调试器,它是未定义的.

javascript internet-explorer settimeout

22
推荐指数
1
解决办法
3万
查看次数

具有箭头函数es6的setTimeout ReactJS

我想知道如何setTimeout()在ReactJS 上使用,因为我这样做:

 timerid = setTimeout( () => this.reqMaq( obj['fkmaqid'] ), 2000 )
Run Code Online (Sandbox Code Playgroud)

它调用两次函数this.reqMaq().

如何阻止第一次通话?并且只是在时间之后保持通话?

这是组件:

reqMaq (maqid) {
    return fetch(`/scamp/index.php/batchprodpry/${maqid}`, {credentials: 'same-origin'})
      .then(req => {
        if (req.status >= 400) {
          throw new Error("Bad response from server")
        }
        return req.json()
      })
      .then(json => this.processMaqReq(json))
      .catch(function(error) {
        console.log('request failed', error)
      })
  }    

  handleChangeMaq (event) {
    event.preventDefault()
    if (event.target.value.length > 0) {
      let obj = this.state.obj
      obj['fkmaqid'] = VMasker.toPattern(event.target.value, "99-99-99-99")
      // if (timerid) {
      //   clearTimeout(timerid)
      // …
Run Code Online (Sandbox Code Playgroud)

javascript settimeout reactjs

22
推荐指数
1
解决办法
5万
查看次数

带有异步/等待的递归 setTimeout

我正在递归地运行 setTimeout,所以我只想每分钟调用一次 API。

这是我的代码:

;(async function ticker (minutes) {
  try {
    const res = await coingecko.global()
    const { market_cap_percentage } = res.data.data
    dominance = { btc: market_cap_percentage.btc, eth: market_cap_percentage.eth }
    console.log({ dominance })
  } catch (ex) {
    console.log(ex.message)
  } finally {
    setTimeout(ticker, minutes * 60 * 1000)
  }
})(1)
Run Code Online (Sandbox Code Playgroud)

问题是:

  • 当我启动我的服务器时,它会立即调用 API
  • 拨打第二个电话需要一分钟(预期行为)
  • 第二次调用后,开始顺序调用API,没有超时

javascript settimeout node.js async-await

22
推荐指数
1
解决办法
1401
查看次数

window.setTimeout()和setTimeout()之间有什么区别?

我想知道它们之间的区别

window.setTimeout(myFancyFunciton, 1000); 
Run Code Online (Sandbox Code Playgroud)

setTimeout(myFancyFunciton, 1000);
Run Code Online (Sandbox Code Playgroud)

两者似乎完全一样.你什么时候应该使用其中一个?

javascript settimeout

21
推荐指数
2
解决办法
1万
查看次数

谷歌地图zoomOut-Pan-zoomIn动画

我想知道如何使用Google Maps API平滑放大动画.

我有2分,一分,中国,一分在法国.当我放大中国时,点击按钮法国.我想让它逐渐缩小平滑,一次缩放级别.当它缩小时,它应该平移到新位置,然后在当前放大一个缩放级别的新位置.

我怎样才能做到这一点?

javascript google-maps settimeout

20
推荐指数
2
解决办法
4万
查看次数

在Node.js中设置计时器

我需要每24小时在Node.js中运行代码.我遇到了一个叫做的函数setTimeout.以下是我的代码段

var et = require('elementtree');
var XML = et.XML;
var ElementTree = et.ElementTree;
var element = et.Element;
var subElement = et.SubElement;
var data='<?xml version="1.0"?><entries><entry><TenantId>12345</TenantId><ServiceName>MaaS</ServiceName><ResourceID>enAAAA</ResourceID><UsageID>550e8400-e29b-41d4-a716-446655440000</UsageID><EventType>create</EventType><category term="monitoring.entity.create"/><DataCenter>global</DataCenter><Region>global</Region><StartTime>Sun Apr 29 2012 16:37:32 GMT-0700 (PDT)</StartTime><ResourceName>entity</ResourceName></entry><entry><TenantId>44445</TenantId><ServiceName>MaaS</ServiceName><ResourceID>enAAAA</ResourceID><UsageID>550e8400-e29b-41d4-a716-fffffffff000</UsageID><EventType>update</EventType><category term="monitoring.entity.update"/><DataCenter>global</DataCenter><Region>global</Region><StartTime>Sun Apr 29 2012 16:40:32 GMT-0700 (PDT)</StartTime><ResourceName>entity</ResourceName></entry></entries>'
etree = et.parse(data);
var t = process.hrtime();
// [ 1800216, 927643717 ]

setTimeout(function () {
  t = process.hrtime(t);
  // [ 1, 6962306 ]
  console.log(etree.findall('./entry/TenantId').length); // 2
  console.log('benchmark took %d seconds and %d nanoseconds', t[0], t[1]);
  //benchmark took 1 seconds and …
Run Code Online (Sandbox Code Playgroud)

settimeout setinterval node.js

20
推荐指数
1
解决办法
6万
查看次数

Angular 4 setTimeout不等待

我正在创建一个带有打字稿的角度4应用程序.

我有一个需要每10秒执行一次的功能,直到指定的停止条件.我使用setTimeout创建了一个包含一些测试代码的循环,看看它是否可行.

我的测试代码:

public run() {
    let i = 0;
    while (i < 4) {
        setTimeout(this.timer,3000);
        i++;
    }
}

public timer(){
    console.log("done")
}
Run Code Online (Sandbox Code Playgroud)

然而,这似乎等待3秒,或浏览器只是慢......然后它打印4次完成.所以代码不起作用.我做错了还是有其他可能做这种事情?

settimeout typescript angular

20
推荐指数
3
解决办法
6万
查看次数