![](/img/trans.png)
[英]Javascript, how can I synchronously call function every second in the loop?
[英]How can I call a group of statements within a function synchronously in javascript?
閱讀JavaScript中的回調函數后,我在實現它們時遇到了一些問題。 這是我在后台頁面中調用的代碼片段:
var f=0;
function sendDataToServer(message,sender,callback) {
chrome.tabs.captureVisibleTab(null,{},function(dataUri){
message['screenshot']=dataUri;
f=1;
console.log("here !"+message['screenshot']); // here screenshot works fine
});
message['allLogs']=dataStore[sender.tab.id];
callback(message);
}
我正在截取頁面的屏幕截圖,並將其添加到對象中。 然后,我向該對象添加另一個屬性,然后調用回調函數。
這是我的回調函數:
sendDataToServer(message,sender,function (message) {
console.log(f);
for(var i in message){
if(message.hasOwnProperty(i))
console.log(i+' '+message[i]);
}
});
}
因此,根據JavaScript的語法和規則,回調中的f值應為1,但應為零,並且在消息對象中沒有屏幕截圖的屬性。
我想在調用回調函數之前先截屏,以便可以在回調中截屏。
我在做什么錯,如何糾正?
將回調移到captureVisibleTab
函數內部。 因此:
chrome.tabs.captureVisibleTab(null,{},function(dataUri){
message['screenshot']=dataUri;
f=1;
console.log("here !"+message['screenshot']); // here screenshot works fine
message['allLogs']=dataStore[sender.tab.id];
callback(message);
});
要解釋這里發生了什么:
該function(dataUri)
聲明的回調函數captureVisibleTab
。 通過在此處移動callback(message)
,我們告訴JavaScript僅在captureVisibleTab
完成時才執行callback(message)
。
按照您的示例,在function(dataUri)
回調之前和之后分別有callback(message)
意味着我們在 function(dataUri)
完成之前執行了callback(message)
function(dataUri)
,因此,您的屏幕快照尚未完全處理。
了解javascript中的閉包。 將您的語句(要同步執行的語句)放入閉包中,然后將該閉包放入回調中。 它們將同步執行。 這的jsfiddle可以幫助你撥弄
Jsfiddle
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.