簡體   English   中英

如何在javascript中同步調用函數中的一組語句?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM