微信小程序 等待幾秒、_微信小程序—setTimeout定時器的坑

背景

實驗室需要將項目的app搬到微信的小程序上,終于知道為什么程序員是手藝人了,只要有需求,就要想方設法去填充這種需求,去年是小程序的元年了可以說,去年冬天一個叫跳一跳的小程序游戲出現在我的微信中,當時就覺得騰訊是真的牛皮。一時間很多的軟件小程序版相繼出現,各大微信公眾號也開始關聯小程序。小程序相比于app,有著獨特的優勢,其中最大的就是沒有ios和android平臺之分,但是同時也有局限,你給我開發個小程序王者榮耀試試。

定時任務

微信小程序API中有兩種定時任務

setInterval

setTimeout

這兩者都能實現定時任務,比如實現一個定時器,但是建議采用后者setTimeout,理由是前者并不精確。詳細請參考https://www.zhihu.com/question/20479535

setTimeout用法

不多說直接上:

var timerName = setTimeout(function() {

//循環代碼

}, delay)

這里在循環代碼處做我們需要循環處理的邏輯,delay是延遲的毫秒數,5秒 = 5 * 1000,timerName是返回的定時器名稱,有什么用,因為要取消這個定時器就需要給需要給出取消的定時器名稱

clearTimeout(timerName)

我有一個需求是每五秒獲取一次位置

startReportHeart() {

var timerTem = setTimeout(function () {

that.heartReport();

}, app.globalConfig.heart_delay)

// 保存定時器name

that.setData({

timer: timerTem

})

},

heartReport()就是獲取位置信息,這樣的效果是,只執行了一次。然后查看了一通資料,發現這個setTimeout只是在delay毫秒之后執行代碼,嗦嘎。

那如何才能循環執行呢?——>遞歸登場

好吧,我的遞歸就是(錯誤代碼)

startReportHeart() {

var timerTem = setTimeout(function () {

that.heartReport();

}, app.globalConfig.heart_delay)

// 保存定時器name

that.setData({

timer: timerTem

})

})

that.startReportHeart()

},

好像沒有毛病啊,自遞歸調用,嗯,沒毛病,但是,,,,情況就是,瞬間出現了堆棧溢出。哈哈哈哈哈哈哈。。。。。。。

分析:

我在startReportHeart函數中開啟了一個timer,5秒后開始執行,heartReport獲取位置信息,此時直接遞歸調用自己,再開啟一個timer,我的天,這么愚蠢的代碼,是誰寫的,沒錯就是我。手動捂臉。

在知道了原因之后,那么如何才能解決呢?我們需要5秒后在一次執行,對就是這個需求,那么自然就是在timer中調用自身啊。笨蛋。

正確代碼:

startReportHeart() {

var timerTem = setTimeout(function () {

that.heartReport();

that.startReportHeart()

}, app.globalConfig.heart_delay)

// 保存定時器name

that.setData({

timer: timerTem

})

},

就這樣完美。

總結

有的時候,遇到的坑真的很想打自己一巴掌,但是解決坑的過程,并發現自己的愚蠢卻是一件非常開心的事呢。這個過程也是十分的funning呢。

小程序開發剛開始一周時間,是的,一周上手,一點一點,現在越來越順手,雖然寫的東西比較low,但是再一次印證了那句話,只有實踐才是最好的學習方式。不要找什么從入門到精通,你會發現,這些都會讓你從入門到放棄。

最后

本文內容個人拙見,若有出入,歡迎指正。

歡迎賞臉關注:家佳Talk

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/538807.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/538807.shtml
英文地址,請注明出處:http://en.pswp.cn/news/538807.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linux中斷處理模式,Linux在保護模式下的中斷處理分析.pdf

Linux在保護模式下的中斷處理分析.pdfLinux 在保護模式下的中斷處理分析劉萬里 楊 斌(西南交通大學計算機與通信工程學院,成都 610031)E-mail:awan摘 要 該文以 80x86 保護模式下的中斷處理方法為基礎,針對 Linux 在實時嵌入式系統中的具體應…

python3.7是什么_Python 3.7 有什么新變化

idlelib 與 IDLE 多個對自動補全的修正。 (由 Louie Lu 在 bpo-15786 中貢獻。) Module Browser (在 File 菜單中,之前稱為 Class Browser) 現在會在最高層級函數和類之外顯示嵌套的函數和類。 (由 Guilherme Polo, Cheryl Sabell…

4.JVM簡述

JVM是一種規范。 就是一個虛擬的用于執行bytecodes字節碼的計算機 可以用軟件來實現,如IBM,SUN,BEA等按照這個規范實現,可以實現比SUN公司更好的JVM,我們自己也可以實現一個。 可以使用硬件來實現,如sun與intel公司研發java的芯…

python ssh shell交互_使用Paramiko在Python上用ssh實現交互式shell?

我想編寫一個程序(在Windows 7上的Python 3.x中),它通過ssh在遠程shell上執行多個命令.在查看paramikos的exec_command()函數之后,我意識到它不適合我的用例(因為在執行命令后通道被關閉),因為命令依賴于環境變量(由先前的命令設置)并且不能連接到一個exec_command()調用,因為它…

linux7如何進入緊急模式,CentOS7開機進入緊急模式EmergencyMode的解決辦法

iOS Runtime學習筆記Associated Objects: interface NSObject (AssociatedObject) property (nonatomic, strong) id associat ...Vim,極簡使用教程,讓你瞬間脫離鍵鼠切換的痛苦注:看大家對Vim仇恨極大,其實它只是一種文本操作方式,可以減少鍵鼠的切換,從…

用pycharm寫python_如何利用pyCharm編寫和運行python文件

在安裝python環境后,通常可以利用IDE pyCharm來編譯我們的python文件。創建一個python文件夾,用pyCharm打開文件夾,在文件夾中新建一個python文件demo.py 也許你知道用cmd中的python指令 python demo.py去運行這個文件,但是如何在…

5.JDK環境配置

下載 進入Oracle官網下載,點擊進入 安裝 一路下一步。記住安裝到哪里了。 配置環境變量 JAVA_HOME 剛才的java安裝目錄 PATH %JAVA_HOME%\bin PATH里配置多個用英文的分號; 分隔。 *classpath,jdk5.0以上可以不用配置了 測試 windows下&#xf…

GBK 編碼

GBK編碼范圍:8140-FEFE,漢字編碼范圍見第二節:碼位分配及順序。 GBK編碼,是對GB2312編碼的擴展,因此完全兼容GB2312-80標準。GBK編碼依然采用雙字節編碼方案,其編碼范圍:8140&#x…

less webpack 熱更新_webpack---less+熱更新 使用

最近嘗試用less寫界面,webpack進行打包,然后發現每次修改less時都需要重新執行webpack打包一下,于是就想到了webpack熱更新這個功能。一、使用lessless是一門css預處理語言,它是拓展了css,增加了變量,Mixin等等。使用l…

6.第一個程序Hello World

新建文件夾 在C盤新建個文件夾 mycode。注意不要用中文。 新建java文件 1、顯示隱藏文件名。 2、右鍵新建文本文件 3、重命名為 Welcome.java。(首字母必須大寫。如果不顯示隱藏文件名,會是Welcome.java.txt不是java文件) 4、編寫代碼 p…

pythonstdin_python 筆試輸入:sys.stdin.readline和input

①:輸入一行數據并輸 出兩種方法 # 輸入一行數據并輸出 import sys # 方法一: str1 input() print(input 輸入:,str1,len,len(str1)) print(循環遍歷輸入得到輸入的每個字符的ascii碼如下:) for i in str1: print(ord(i)) # 方法二&#xff…

c語言字符串二維數組的動態分配應,C語言中動態分配二維數組復習過程.doc

C語言中動態分配二維數組復習過程.docC語言中動態分配二維數組在C中動態分配內存的,對于單個變量,字符串,一維數組等,都是很容易的。C中動態分配二維數組的方法,很少有C語言書中描述,我查找了有的C語言書中…

7.Java常用開發工具

文本編輯器 任意選一款 UltraEdit EditPlus notepad 集成開發環境 IDE:Integrated Development Environment --JBulider (基本淘汰) --Eclipse 普遍使用。https://www.eclipse.org/downloads/ --NetBeans ------------- 更多的Java&a…

python京東商品_Python爬取京東的商品分類與鏈接

前言本文主要的知識點是使用Python的BeautifulSoup進行多層的遍歷。如圖所示。只是一個簡單的哈,不是爬取里面的隱藏的東西。示例代碼from bs4 import BeautifulSoup as bsimport requestsheaders {"host": "www.jd.com","User-Agent&quo…

python加入中小學課程_【python即將進入中學課堂,編程從小抓起,竟然在這幾點上應驗了】- 環球網校...

【摘要】我們都知道,不論是我們使用的app,還是各種各樣的游戲,小程序,都離不開編程軟件的貢獻,其中python占據了半壁江山,隨著大家對python的重視,python即將進入中學課堂,這究竟是好…

用動態規劃算法求解最少硬幣問題 c語言,動態規劃算法求解硬幣找零問題

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓看著這代碼怎么這么熟悉。package 動態規劃找零;import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scan new Scanner(System.in);int change;change scan.nextInt();int[] coins …

git命令行使用

* git branch : 查看本地分支 * git branch -r : 查看遠程分支 * git branch -a : 查看全部分支 * git branch name : 本地新建分支 * git checkout name : 切換到本地 name 分支 * git pull origin name : 從遠程 name 拉取代碼 * git merge name : 合并name * git diff : 查看…

8.對Hello World程序的深入

Welcome.java public class Welcome{public static void main(String[] args){System.out.println("Hello World,I am Java!");}}1、Java對大小寫敏感。如果出現了大小寫拼寫錯誤,程序無法運行。 關鍵字class表明Java程序中的全部內容都包含在類中&…

python整數類型沒有取值范圍限制_詳解Python中6種數據類型

Python中數據類型主要有六種:數字類型,字符串類型,元組類型,列表類型,文件類型和字典類型,我們今天先介紹前四種類型。 假如在Python程序中,出現了“010”,那么這個“010”到底是什么…

bb平臺c語言第2章 習題,C語言各章習題集

C語言習題集第 1 章C語言概述一. 填空題1. C程序是由構成的,一個C程序中至少包含。是C程序的基本單位。2. 任何C程序必須有且只有一個_______函數。3. C程序注釋是由和所界定的文字信息組成的。二. 判斷題1.2.3.4.5. 一個C程序的執行總是從該程序的main函數開始&…