js睡眠
2973 ワード
java
前言
Javaには、睡眠方法(すなわちsleep)があります.
シーンの適用
スレッドスリープに使用します.
js
前言
jsでは、睡眠方法はなく、関数やコードの実行を遅らせるしかありません.
シーンの適用
適用シーンは、ある操作にコールバック関数(例えば、リスナーなど.)があり、この操作(クエリーデータであれば)に時間がかかると、コールバック関数は実行されません.しかし、その操作の後のコードはコールバック関数に基づいており、コールバック関数のデータを使用する必要があります.
特に注意しなければならないのは、ある操作にコールバック関数がある場合、jsコードは非同期実行に相当し、非同期実行の利点は、後のコードが前のコードの実行が完了するのを待つ必要がなく、同時に実行できることである.しかし、悪い点は、後のコードが前のコード(すなわちコールバック関数)のデータに基づいている場合、このとき後のコードは実行を遅らせる必要があることである.
使用方法
パラメータを渡す必要があるかどうかによって、2種類に分けて、
1、パラメータを渡す必要がない
settimeout(関数名または「関数名」、ミリ秒数);
2、パラメータを渡す必要がある
一、パラメータは文字列
例
二、パラメータは対象
例
参照先:
http://boleyn.iteye.com/blog/1144015
http://www.ruanyifeng.com/blog/2012/12/asynchronous%EF%BC%BFjavascript.html
まとめ
実際、遅延関数は後のコードにのみ適用され、コールバック関数のデータを使用する必要がない場合、そうでなければ、決して遅延関数を使用することはできません.後のコードがコールバック関数より先に実行される可能性が高いため、このとき後のコードが取得したデータは正確ではありません.
では、後のコードがコールバック関数のデータを使用する必要がある場合は、どうすればいいのでしょうか.方法は2種類あり、
1、後ろのコードをコールバック関数に直接入れます.
コールバック関数のデータがループ内にある場合は、後続のコードをループ内に配置し、データが最終データであるかどうかを判断する条件を追加します.
3、閉包(検討対象?)を採用する.
サンプルコード
前言
Javaには、睡眠方法(すなわちsleep)があります.
シーンの適用
スレッドスリープに使用します.
js
前言
jsでは、睡眠方法はなく、関数やコードの実行を遅らせるしかありません.
シーンの適用
適用シーンは、ある操作にコールバック関数(例えば、リスナーなど.)があり、この操作(クエリーデータであれば)に時間がかかると、コールバック関数は実行されません.しかし、その操作の後のコードはコールバック関数に基づいており、コールバック関数のデータを使用する必要があります.
特に注意しなければならないのは、ある操作にコールバック関数がある場合、jsコードは非同期実行に相当し、非同期実行の利点は、後のコードが前のコードの実行が完了するのを待つ必要がなく、同時に実行できることである.しかし、悪い点は、後のコードが前のコード(すなわちコールバック関数)のデータに基づいている場合、このとき後のコードは実行を遅らせる必要があることである.
使用方法
パラメータを渡す必要があるかどうかによって、2種類に分けて、
1、パラメータを渡す必要がない
settimeout(関数名または「関数名」、ミリ秒数);
2、パラメータを渡す必要がある
一、パラメータは文字列
例
//
setTimeout("addMarkerAndInfoWindowAnalyze('" + eventType + "')", 500);
二、パラメータは対象
例
setTimeout(function(){ (obj); }, 1000);
参照先:
http://boleyn.iteye.com/blog/1144015
http://www.ruanyifeng.com/blog/2012/12/asynchronous%EF%BC%BFjavascript.html
まとめ
実際、遅延関数は後のコードにのみ適用され、コールバック関数のデータを使用する必要がない場合、そうでなければ、決して遅延関数を使用することはできません.後のコードがコールバック関数より先に実行される可能性が高いため、このとき後のコードが取得したデータは正確ではありません.
では、後のコードがコールバック関数のデータを使用する必要がある場合は、どうすればいいのでしょうか.方法は2種類あり、
1、後ろのコードをコールバック関数に直接入れます.
コールバック関数のデータがループ内にある場合は、後続のコードをループ内に配置し、データが最終データであるかどうかを判断する条件を追加します.
3、閉包(検討対象?)を採用する.
サンプルコード
/**
*
*
* @param tableId
* id
*/
function queryEventType(tableId) {
var searchOptions = {
// map: mapObj,
pageSize : 100, // ( 100)
orderBy : '_id:ASC' // id
};
AMap.service([ "AMap.CloudDataSearch" ], function() {
var search = new AMap.CloudDataSearch(tableId, searchOptions);
search.searchByDistrict(" ", function(status, result) {
if (status == 'complete') {
dataTypeNumbers[dataType] = result.count; //
// ,
//
var queryNumber = Math.ceil(dataTypeNumbers[dataType] / 100);
for ( var i = 1; i <= queryNumber; i++) {
var searchOptions1 = {
pageSize : 100,
pageIndex : i,
orderBy : '_id:ASC' // id
};
var search1 = new AMap.CloudDataSearch(tableId,
searchOptions1);
search1.searchByDistrict(" ", function(status, result) {
if (status == 'complete') {
dataTypeDatas[dataType] = [];
dataTypeDatas[dataType] = dataTypeDatas[dataType]
.concat(result.datas); //
// ,
if(dataTypeDatas[dataType].length == result.count){
// 1.
getPageCountAnalyze();
// 2.
pingJieDataAndPageButtonAnalyze();
// 3. div
setPingJieDataToDivAnalyze();
// 4.
addMarkerAndInfoWindowSwitchAnalyze();
}
} else {
return;
}
});
}
} else {
return;
}
});
});
}