[英]call a function after the setTimeout finishes execution- Javascript
我有一個場景,我想在執行三個函數a(),b(),c()之后調用函數d(),這三個函數並行執行。
setTimeout(function a(){ alert("Hello A"); a()}, 3000);
setTimeout(function b(){ alert("Hello B"); b()}, 3000);
setTimeout(function c(){ alert("Hello C"); c()}, 3000);
在完成所有函數執行后,我希望執行下面的函數d()
function d(){
console.log('hello D')
}
任何幫助,將不勝感激。
你可以這樣做
var promise1 = new Promise(function(resolve, reject) { setTimeout(function a(){ alert("Hello A"); resolve();}, 3000); }) var promise2 = new Promise(function(resolve, reject) { setTimeout(function b(){ alert("Hello B"); resolve();}, 3000); }) var promise3 = new Promise(function(resolve, reject) { setTimeout(function c(){ alert("Hello C"); resolve();}, 3000); }) Promise.all([promise1, promise2, promise3]).then(function() { function d(){ console.log('hello D') } d(); });
你可以使用Promise.all
來做到這一點。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all
const a = new Promise( (resolve, reject) => setTimeout( () => { console.log("a is finished"); resolve() }, 3000) ), b = new Promise( (resolve, reject) => setTimeout( () => { console.log("b is finished"); resolve() }, 1000) ), c = new Promise( (resolve, reject) => setTimeout( () => { console.log("c is finished"); resolve() }, 2000) ) const d = () => console.log('hello D') Promise.all( [a,b,c] ).then(d)
您可能需要一些全局變量/對象來保存執行每個函數的狀態,並在最后檢查是否可以啟動d函數。 例:
// you probably need some global variable/object oCheckedFunctions = { a:false, b:false, c:false }; function d(){ alert('hello D') } function a(){ alert("Hello A"); oCheckedFunctions.a = true; checkAndTryForD(); } function b(){ alert("Hello B"); oCheckedFunctions.b = true; checkAndTryForD(); } function c(){ alert("Hello C"); oCheckedFunctions.c = true; checkAndTryForD(); } function checkAndTryForD() { if (oCheckedFunctions.a && oCheckedFunctions.b && oCheckedFunctions.c) { d(); } } // your functions setTimeout(a, 3000); setTimeout(b, 3000); setTimeout(c, 3000);
只需定義一個有前途的計時器:
const timer = ms => new Promise(res => setTimeout(res, ms));
所以你可以這樣做:
const log = v => _ => console.log(v);
Promise.all([
timer(3000).then(log("a")),
timer(3000).then(log("b"))
]).then(log("c"));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.