1. 程式人生 > >在JavaScript中想讓一個函式執行完畢之後再執行下一個函式?

在JavaScript中想讓一個函式執行完畢之後再執行下一個函式?

先說結論:

首先,JavaScript是解釋性語言,本來就是順序執行的!!

所以,如果發現有一段js程式碼總是在一段程式碼之前就執行完了,比如說報了null異常,那麼有可能是回撥函式的非同步機制造成的。

此種情形下解決的方法是,把要執行的函式放在回撥函式內部就可以了。

舉個栗子

例如用JQuery Ajax 的 $.getJSON 方法:

$(function () {
$.getJSON("url", function (res) {
$("#myDiv").append("<div id = "divId">"+res.name+"</div>");
}
});
$(function(){
var a = document.getElementById("divId");
console.log(a.innerHTML);
});

這種情況下結果是null,這就是因為第二個函式會在第一個含有回撥函式的函式執行完畢之前就開始執行了,還沒等append()方法執行,所以結果為空。那麼把第二個方法放入回撥方法內
$(function () {
$.getJSON("url", function (res) {
$("#myDiv").append("<div id = "divId">"+res.name+"</div>");
printA();
}
});
function printA(){
var a = document.getElementById("divId");
console.log(a.innerHTML);
}

結果為res.name

相關推薦

JavaScript一個函式執行完畢之後執行一個函式

先說結論: 首先,JavaScript是解釋性語言,本來就是順序執行的!! 所以,如果發現有一段js程式碼總是在一段程式碼之前就執行完了,比如說報了null異常,那麼有可能是回撥函式的非同步機制造成的

C# 本程序執行完畢執行執行

  最近做了一套MES整合系統,由上料到成品使自動化執行,其中生產過程是逐步的,但是每一個動作都需要獨立的執行緒進行資料監聽,那麼就需要實現執行緒等待。 程式碼: using System; using System.Collections.Generic; using System.Compone

C# 本進程執行完畢執行一線程

pda lag initial process orm threading 監聽 message tasks   最近做了一套MES集成系統,由上料到成品使自動化運行,其中生產過程是逐步的,但是每一個動作都需要獨立的線程進行數據監聽,那麽就需要實現線程等待。 代碼: us

巨坑:瀏覽器在短時間內對於同一個請求的處理,會先等待上一個請求完成後,處理一個請求,導致在測試異步時誤導代碼有問題。

例子 red count 時間 ble http tab 問題 結束 例子:   tornado後端異步處理(模擬異步處理20秒)      瀏覽器請求接口:http://192.168.1.98:1104/test         然後又打開一個table,請求同一個接口

關於使用CyclicBarrier使主執行緒等待子執行執行之後執行的問題

"pool-1-thread-2" prio=6 tid=0x00000000067f7800 nid=0x1534 at breakpoint[0x000000000876f000]    java.lang.Thread.State: RUNNABLE at com.iteye.wwwcomy.thre

等子執行緒Thread執行之後執行mian執行緒的UI更新等等

我想打一下1,2,3。然後我這麼寫System.out.println(1); Thread thread=new Thread(new Runnable() { public void r

迴圈裡面巢狀一個非同步請求,所有迴圈執行完畢返回請求的資料

場景介紹: 使用es6實現爬蟲,先遍歷完列表,然後迴圈列表的根據url去查詢每篇文章的詳細內容,最後將所有爬取完的資料寫入資料庫(只寫一次,避免資料庫頻繁的開啟的關閉,影響效能)。 原始實現方式和痛點分析: var list =["url1","url2","url3",.

netframework等待多個子執行執行完畢並計算執行時間

本文主要描述在.netframework中(實驗環境.netframework版本為4.6.1)提供兩種方式等待多個子執行緒執行完畢。 ManualResetEvent              在多執行緒中,將ManualRe

線程池: 等待線程池內所有線程執行完畢繼續任務

繼續 con col await mina cut bsp src code boolean loop = true; do{ loop=!executorService.awaitTermination(2, TimeUnit.SECONDS); }while(

執行執行時,如果一個邏輯需要等若干個執行執行完成後執行,怎麼實現?

實際開發過程中,尤其是大型的業務系統中或批量處理系統中,我們通常會用到多執行緒來進行任務拆分,來提高系統的處理能力。當對業務不斷拆分時,多執行緒各自任務之間也形成了錯綜複雜的關係。 我們常常遇到這樣的情況,業務模組A 拆分成了 A1 、A2.....An個多執行緒,來提高處理速度,可是 Ak(1<k&

HTML5 完美解決javascriptiphone手機和android手機複製文字到剪板問題

1.執行以下解決方案條件:(這個是原理)①執行復制方法時 所複製文字不能被任何 塊級元素和行內塊元素和行內元素遮蓋否則無效;(解決方案:將文字通過絕對定位或其他方式移除螢幕外)②ios中不能複製屬性值,只能複製文字元素節點;(解決方案:可以把文字顏色設成背景色就能達到隱藏看不見的效果不影響顯示);直接上程式碼

針對QT——“在程式檔案(*ui,*cpp,*h)更改之後編譯執行的程式結果無法更新”——解決方案

本篇文章主要介紹在QT中,對程式檔案(*ui,*cpp,*h)更改之後編譯執行的程式結果卻無法更新的解決方案。 問題描述 在設計QT的GUI使用者介面時,我們需要不斷對程式檔案進行修改以優化使用者體驗,因此需要更新程式的生成檔案。 實際經歷:筆者最近在一個專案中需要將QT的GUI程式

VMware Workstation 與 Hyper-V 不相容。請先從系統移除 Hyper-V 角色,然後執行 VMware Workstation

VMware Workstation 與 Hyper-V 不相容。請先從系統中移除 Hyper-V 角色,然後再執行 VMware Workstation。 原因:Hyper-V後VMware都要獨佔基於CPU等底層硬體的 Hypervisor才能執行,所

JS 實現for迴圈裡面睡眠1秒執行的相同的效果

   實現的效果:每次產生一個隨機數,並做相應的動作後,暫停1秒再執行相同的操作,並且可以控制執行的次數 實現的程式碼如下: <script type="text/javascript">

將字串的所有字母都替換成該字母的一個字母

題目很簡單,但是有很多細節,我第一次編的時候只考慮到當字串中的某個字元為‘z’或’Z’時,要將其轉化為’a’或‘A’; 第一次的程式如下,編譯執行通過 #include<stdio.h> #include<string.h>

objective-c 等待多個非同步函式完成後,執行某段程式碼--GCD Group 的使用

有個 API 如下: + (void)updateByUser:(ALUser *)user completion:(void (^)(void))completion { AVQuery *query = [AVQuery queryWithClassNam

WebBrowser載入完畢執行

System.Threading.AutoResetEvent obj = new System.Threading.AutoResetEvent(false); void webBrowser1_DocumentCompleted(object sender,

shell指令碼不暫停教程,等待一定時間之後執行指令碼一條命令

學習springcloud時想要編寫一個指令碼開啟eureka和配置中心的服務,由於配置中心需要註冊到eureka上所以需要等到eureka開啟完成再開啟,可以在指令碼中使用一個while迴圈達到我們的目的 ti1=`date +%s` #獲取時間戳 t

我用Python寫了一個共享單車的應用程式!一個摩拜單車會是我嗎

學習如何使用 Redis 和 Python 構建一個位置感知的應用程式。 我經常出差。但不是一個汽車狂熱分子,所以當我有空閒時,我更喜歡在城市中散步或者騎單車。我參觀過的許多城市都有共享單車系統,你可以租個單車用幾個小時。大多數系統都有一個應用程式來幫助使用者定位和租用他們的單車,但對於像我這樣

(面試題)模擬 主程序需要等待多個子程序結束之後執行後續的程式碼的實現

解法1. Thread.join方法 import java.util.Vector; public class Test { public static void main(String[] args) throws InterruptedExce