code optimize
This commit is contained in:
		| @ -75,10 +75,10 @@ function redirectTab(tab, url) { | ||||
|             if (url !== u) { | ||||
|                 curUrl = u; | ||||
|                 let req = { | ||||
|                     from: "DataExtracter:GotoUrl", | ||||
|                     from: "GotoUrl", | ||||
|                     url: url | ||||
|                 } | ||||
|                 chrome.tabs.sendMessage(tab.id, req); | ||||
|                 sendMessage(tab, req); | ||||
|             } | ||||
|         }) | ||||
|         .then(() => queryUrl(tab, curUrl)) | ||||
| @ -94,13 +94,12 @@ function redirectTab(tab, url) { | ||||
|  */ | ||||
| function extractTabData(tab, itemsSelector, fieldSelectors) { | ||||
|     let req = { | ||||
|         from: "DataExtracter:Extract", | ||||
|         from: "Extract", | ||||
|         itemsSelector: itemsSelector, | ||||
|         fieldSelectors: fieldSelectors | ||||
|     } | ||||
|     let failMsg = "extractTabData failed after 10 second."; | ||||
|     let cond = r => !!r; | ||||
|     return sendMessageAndDetect(tab, req, cond, failMsg); | ||||
|     return sendMessage(tab, req, cond); | ||||
| } | ||||
|  | ||||
| /** | ||||
| @ -110,11 +109,10 @@ function extractTabData(tab, itemsSelector, fieldSelectors) { | ||||
|  */ | ||||
| function reportIn(tab) { | ||||
|     let req = { | ||||
|         from: "DataExtracter:ReportIn" | ||||
|         from: "ReportIn" | ||||
|     } | ||||
|     let failMsg = "reportIn failed after 10 second."; | ||||
|     let cond = r => r == req.from; | ||||
|     return sendMessageAndDetect(tab, req, cond, failMsg); | ||||
|     return sendMessage(tab, req, cond); | ||||
| } | ||||
|  | ||||
| /** | ||||
| @ -125,11 +123,10 @@ function reportIn(tab) { | ||||
|  */ | ||||
| function queryUrl(tab, urlExcluded) { | ||||
|     let req = { | ||||
|         from: "DataExtracter:QueryUrl" | ||||
|         from: "QueryUrl" | ||||
|     } | ||||
|     let failMsg = "queryUrl failed after 10 second."; | ||||
|     let cond = url => url && (!urlExcluded || (urlExcluded && urlExcluded != url)); | ||||
|     return sendMessageAndDetect(tab, req, cond, failMsg); | ||||
|     return sendMessage(tab, req, cond); | ||||
| } | ||||
|  | ||||
| /** | ||||
| @ -137,27 +134,27 @@ function queryUrl(tab, urlExcluded) { | ||||
|  * @param {object} tab the table where to send the message | ||||
|  * @param {object} req the request data. | ||||
|  * @param {function} cond success condition function, r:any=>boolean | ||||
|  * @param {string} failMsg message when failed after time out | ||||
|  * @param {number} failedTimeOut fail time out | ||||
|  * @param {number} detectInterval interval for detecting | ||||
|  * @return {Promise} a promise of the response. | ||||
|  */ | ||||
| function sendMessageAndDetect(tab, req, cond, failMsg, failedTimeOut, detectInterval) { | ||||
| function sendMessage(tab, req, cond, failedTimeOut, detectInterval) { | ||||
|     req.from = "DataExtracter:" + req.from; | ||||
|     failedTimeOut = failedTimeOut || 10000; | ||||
|     detectInterval = detectInterval || 500; | ||||
|     return new Promise((resolve, reject) => { | ||||
|         let timeOut; | ||||
|         let rejectTimeout = setTimeout(() => { | ||||
|             reject(failMsg); | ||||
|             reject(`${req.from} failed after ${failedTimeOut/1000} seconds.`); | ||||
|             clearTimeout(timeOut); | ||||
|         }, failedTimeOut); | ||||
|         loop(); | ||||
|  | ||||
|         function loop() { | ||||
|             chrome.tabs.sendMessage(tab.id, req, r => { | ||||
|                 if (cond(r)) { | ||||
|                     resolve(r); | ||||
|                 if (!cond || cond(r)) { | ||||
|                     clearTimeout(rejectTimeout); | ||||
|                     resolve(r); | ||||
|                 } else { | ||||
|                     timeOut = setTimeout(() => { | ||||
|                         loop(); | ||||
|  | ||||
		Reference in New Issue
	
	Block a user