Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >异步功能+ await + setTimeout的组合

异步功能+ await + setTimeout的组合
EN

Stack Overflow用户
提问于 2015-10-22 20:04:42
回答 13查看 484.7K关注 0票数 495

我正在尝试使用新的异步功能,我希望解决我的问题能在未来帮助其他人。这是我的代码,它正在运行:

代码语言:javascript
运行
AI代码解释
复制
  async function asyncGenerator() {
    // other code
    while (goOn) {
      // other code
      var fileList = await listFiles(nextPageToken);
      var parents = await requestParents(fileList);
      // other code
    }
    // other code
  }

  function listFiles(token) {
    return gapi.client.drive.files.list({
      'maxResults': sizeResults,
      'pageToken': token,
      'q': query
    });
  }

问题是,我的while循环运行得太快,脚本每秒向google API发送太多请求。因此,我想构建一个延迟请求的睡眠函数。因此,我还可以使用此函数来延迟其他请求。如果有其他方法延迟请求,请让我知道。

不管怎样,这是我的新代码,它不能工作。请求的响应被返回到setTimeout中的匿名异步函数,但我只是不知道如何才能将响应返回到睡眠函数resp。添加到初始的asyncGenerator函数。

代码语言:javascript
运行
AI代码解释
复制
  async function asyncGenerator() {
    // other code
    while (goOn) {
      // other code
      var fileList = await sleep(listFiles, nextPageToken);
      var parents = await requestParents(fileList);
      // other code
    }
    // other code
  }

  function listFiles(token) {
    return gapi.client.drive.files.list({
      'maxResults': sizeResults,
      'pageToken': token,
      'q': query
    });
  }

  async function sleep(fn, par) {
    return await setTimeout(async function() {
      await fn(par);
    }, 3000, fn, par);
  }

我已经尝试了一些方法:将响应存储在全局变量中并从睡眠函数中返回它,在匿名函数中进行回调,等等。

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2015-10-23 00:21:16

您的sleep函数不起作用,因为setTimeout不起作用(还没有?)返回一个可以awaited的promise。您将需要手动将其删除:

代码语言:javascript
运行
AI代码解释
复制
function timeout(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}
async function sleep(fn, ...args) {
    await timeout(3000);
    return fn(...args);
}

顺便说一句,为了减慢你的循环速度,你可能不想使用一个接受回调并像这样延迟它的sleep函数。我建议:

代码语言:javascript
运行
AI代码解释
复制
while (goOn) {
  // other code
  var [parents] = await Promise.all([
      listFiles(nextPageToken).then(requestParents),
      timeout(5000)
  ]);
  // other code
}

这使得parents的计算至少需要5秒。

票数 897
EN

Stack Overflow用户

发布于 2018-08-20 22:01:12

快速的一行,内联方式

代码语言:javascript
运行
AI代码解释
复制
 await new Promise(resolve => setTimeout(resolve, 1000));
票数 334
EN

Stack Overflow用户

发布于 2020-10-30 12:04:51

更新2021

await setTimeout最终与Node.js 16一起发布,不再需要使用util.promisify()

代码语言:javascript
运行
AI代码解释
复制
import { setTimeout } from 'timers/promises';

(async () => {
  const result = await setTimeout(2000, 'resolved')
  // Executed after 2 seconds
  console.log(result); // "resolved"
})()

官方Node.js文档:Timers Promises API (Node内置的库)

票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33289726

复制
相关文章
编译Qt
Windows 下自己准备自己想要的编译器。编译自己想要的 Qt 版本 最近 5.6 出来了,有好多新的变化,第一时间准备尝鲜。 我自己的是 MSVC2015 Qt5.6
Harper
2021/07/27
7680
qt编译程序无法在其他电脑上运行
报错原因:缺少相关配置文件 1打开本机电脑的qt自带控制台 选择你编译的那个打开 在这里输入你的编译后的exe文件位置 然后输入cwindeployqt+程序名称 就会发
炒香菇的书呆子
2020/08/18
1.2K0
qt编译程序无法在其他电脑上运行
使用OpenCV在Qt控件上播放视频
https://gitee.com/fensnote/demo_code/tree/master/qtCode/opencv_video
fensnote
2021/05/31
3K0
使用OpenCV在Qt控件上播放视频
【Qt】Qt 开发桌面程序 ( Qt 版本 5.14.2 | 创建 Qt 桌面程序 | 构建并运行 Qt 桌面程序 )
首先要安装 Qt 开发环境 , 参考 【Qt】Qt 开发环境安装 ( Qt 版本 5.14.2 | Qt 下载 | Qt 安装 ) 博客 ;
韩曙亮
2023/03/29
3.6K0
【Qt】Qt 开发桌面程序 ( Qt 版本 5.14.2 | 创建 Qt 桌面程序 | 构建并运行 Qt 桌面程序 )
qt静态编译
qt静态编译出现以下问题怎么解决呢? D:\qt-5.9.0\qtbase\src\corelib\global\qlibraryinfo.cpp: fatal error C1853: “qmake_pch.pch”预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反) NMAKE : fatal error U1077: “"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\amd64\cl.EXE"”: 返回代码“0x2” Stop. NMAKE : fatal error U1077: “"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\amd64\nmake.exe"”: 返回代码“0x2” Stop. NMAKE : fatal error U1077: “cd”: 返回代码“0x2” Stop. NMAKE : fatal error U1077: “cd”: 返回代码“0x2” Stop.
用户3519280
2023/07/06
4660
vs2010编译64位qt5.5
下载qt5.5源代码 [http://download.qt.io/archive/qt/5.5/5.5.0/single/]
用户3519280
2023/07/06
4710
Qt5.8.0使用静态编译
下载链接: http://pan.baidu.com/s/1mhVe75e 密码: zdxh
繁花云
2018/07/31
1.6K0
qt交叉编译环境搭建_qt socket
简单服务发现协议(SSDP,Simple Service Discovery Protocol)是一种应用层协议,是构成通用即插即用(UPnP)技术的核心协议之一。 简单服务发现协议提供了在局部网络里面发现设备的机制。控制点(也就是接受服务的客户端)可以通过使用简单服务发现协议,根据自己的需要查询在自己所在的局部网络里面提供特定服务的设备。设备(也就是提供服务的服务器端)也可以通过使用简单服务发现协议,向自己所在的局部网络里面的控制点宣告它的存在。
全栈程序员站长
2022/11/07
1.2K0
为Qt程序获取编译日期时间
利用__DATE__与__TIME__编译宏特性为Qt程序添加编译日期时间。 static const QDateTime buildDateTime() { QString dateTime; dateTime += __DATE__; dateTime += __TIME__; return QLocale(QLocale::English).toDateTime(dateTime, "MMM dd yyyyhh:mm:ss"); } 另外,下列代码并不能获取编译日期时
Qt君
2019/08/05
2.8K0
编译QCAD_qt 编译
目前开源的二维CAD有QCAD、LibreCAD等,且LibreCAD可以说是QCAD的分支版本。对比这款开源软件,发现QCAD的功能与操作习惯和AutoCAD更接近。LibreCAD是纯C++开发,而QCAD使用了Qt的Script模块,使用了C++和Javascript脚本两种开发方式。我觉得使用脚本来扩展功能比纯C++开发效率会高点,因为这些开源项目源码都很大,编译比较花时间。如果使用脚本来开发的话,没有编译时间,可以边写脚本边测试,很方便。
全栈程序员站长
2022/09/20
1.6K0
编译QCAD_qt 编译
QT软件开发: 获取媒体详细信息(视频/音频)
一、环境介绍 操作系统介绍:win10 64位 QT版本: 5.12.6 编译器: MinGW32 FFMPEG: 4.2.2 二、软件效果 三、核心代码 3.1 widget.cpp #include "widget.h" #include "ui_widget.h" Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this); ui->
DS小龙哥
2022/01/12
1.3K0
QT软件开发: 获取媒体详细信息(视频/音频)
Qt 5.11.1 静态编译
离线安装包:http://download.qt.io/archive/qt/5.11/5.11.1/
我与梦想有个约会
2018/09/19
6.2K0
Qt 5.11.1 静态编译
使用python批量编译Qt工程脚本
主要用于windows平台(msvc编译器)。 部署环境   设置脚本内的build_list变量的值即可。 qmake.exe路径; jom.exe路径; 编译环境变量; 编译项目。 源码 import os import datetime import subprocess build_list = [ { 'qmake': r'C:\Qt\Qt5.12.2\5.12.2\msvc2017_64\bin\qmake.exe', 'qmake_params': r
Qt君
2019/10/23
1K0
浅谈 Qt 静态编译
本文要讲解的是Qt 静态编译,Qt中默认的应该是动态编译,那么本文就浅淡的介绍一下静态编译,先来看内容。
用户3519280
2023/07/06
1.2K0
在Jetson TX开发套件上使用QT Creator
在视频中,Jetsonhacks演示了如何在NVIDIA Jetson TX开发工具包中使用QTCreator IDE来cmake一个应用,他用librealsense 2做例子,这是一个为Intel RealSense D400相机开发的SDK。
GPUS Lady
2018/08/01
8300
在Jetson TX开发套件上使用QT Creator
Qt 5.11.1 静态编译
离线安装包:http://download.qt.io/archive/qt/5.11/5.11.1/
我与梦想有个约会
2020/01/04
2.2K0
Windows下QT编译和使用MQTT
前几篇文章写了MQTT服务器的搭建以及连接测试,本文是介绍用 QT来进行MQTT服务器的连接,由于QT没有现成的库,需要从QT 官网自己下载 MQTT 源码并编译。
嵌入式小屋
2022/04/27
3.7K0
Windows下QT编译和使用MQTT
qt source 源码编译
地址:https://download.qt.io/archive/qt/ 源码使用tag版本,6.0以上版本有cmakelist.txt可以直接cmake编译(但差的三方库比较多),6.0以下的版本,cmakelist.txt在qtbase文件夹中,使用
sofu456
2022/03/07
1.2K0
qt source 源码编译
Qt程序打包
这样qt就会自动把依赖拷贝出来,然后我们安装软件Enigma Virtual Box
繁花云
2018/07/31
1.4K0
qt tabwidget样式_qt tablewidget使用
ui.tabWidget->setStyleSheet( “QTabWidget{background: #f0f0f0;}” “QTabBar::tab{background:transparent;color:black;font:22px; min-width:103.8px;min-height:49px;}” “QTabBar::tab:first:selected{border-image:url(:/png/images/chat_state.png);}” “QTabBar::tab:first{border-image:url(:/png/images/chat.png);}” “QTabBar::tab:middle:selected{border-image:url(:/png/images/message_state.png);}” “QTabBar::tab:middle{border-image:url(:/png/images/message.png);}” “QTabBar::tab:last:selected{border-image:url(:/png/images/members_state.png);}” “QTabBar::tab:last{border-image:url(:/png/images/members.png);}” );
全栈程序员站长
2022/11/09
9360

相似问题

使用泛型方法时如何在泛型方法中设置泛型属性属性?

10

带有任何泛型参数的泛型属性列表

11

使用带有泛型对象属性的TableView

10

React.memo的Typescript泛型类等效类

16

使用变量,如类型/泛型方法

26
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档