当前位置: 首页 > 知识库问答 >
问题:

JavaScript:4个asyncronys函数在继续之前依次等待对方完成?

万德海
2023-03-14
// NOTE: localDataStore is a function to stringify/parse an item from localStorage

function removeCookie() {
chrome.cookies.remove({"name":"v1guid","url":"http://website.com"},function (cookie){
    console.log("cookie removed");
});
}

function getCookie() {
chrome.cookies.get({"url": "http://website.com", "name": "v1guid"}, function(cookie) {
    console.log(cookie);
    if(cookie !== null) {
        console.log("getting cookie");
        localDataStore.set("cookie", cookie);
        console.log(localDataStore.get("cookie"));
    }
});
}

function setCookie() {
var cookiedata = localDataStore.get("cookie");
chrome.cookies.set({
    "url": "http://website.com", 
    "name": cookiedata.name, 
    "value": cookiedata.value,
    "domain": cookiedata.domain,
    "path": cookiedata.path,
    "secure": cookiedata.secure,
    "httpOnly": cookiedata.httpOnly,
    "storeId": cookiedata.storeId}, function(cookie) {
    console.log("cookietest");
    console.log(JSON.stringify(cookie));
});
}

function minePosts() {
// Do a bunch of stuff
}
getCookie();
removeCookie();
minePosts();
setCookie();

共有1个答案

南宫鸿晖
2023-03-14

可以使用回调或$.deferred()来推迟函数。前者更简单,而后者更健壮,因为您可以使用deferred.reject()来处理错误状态。

1)回调

function removeCookie(callback) {
    chrome.cookies.remove({"name":"v1guid","url":"http://website.com"},function (cookie){
        console.log("cookie removed");
        callback();
    });
}

等等。

getCookie(function(){
    removeCookie(function(){
        minePosts(function(){
            setCookie(function(){
                // do something
            });
        });
    });
});
function removeCookie() {
    var deferred = $.Deferred();
    chrome.cookies.remove({"name":"v1guid","url":"http://website.com"},function (cookie){
        console.log("cookie removed");
        deferred.resolve();
    });
    return deferred.promise();
}
getCookie().then(function(){
    removeCookie().then(function(){
        minePosts().then(function(){
            setCookie().then(function(){
                // do something
            });
        });
    });
});
getCookie()
    .then(removeCookie)
    .then(minePosts)
    .then(setCookie)
    .then(function(){
        // do something
    });
 类似资料:
  • 我有两个JS函数。一个叫另一个。在调用函数中,我想调用另一个函数,等待该函数完成,然后继续。例如,伪代码: 我想出了这个解决方案,但不知道这是否是一个明智的方法。 这合法吗?有没有更优雅的处理方法?也许用jQuery?

  • 问题内容: 我正在尝试在Node.js / Express中创建一个路由,该路由从两个查询中读取数据,然后基于来自查询的数据来增加计数。由于Node.js是异步的,因此在读取所有数据之前会显示总计。 我创建了一个简单的示例,以达到我目前正在做的事情 我不确定要等到两个功能都完成后才能打印总计,我该做什么。我是否需要创建一个自定义事件发射器来实现这一目标? 问题答案: 拥抱异步性: 或使用Promi

  • 我有一个加载页面,我想在其中对不相关的信息执行两个网络请求(rxjava)。在这两个请求完成之前,我不想进入下一页,即使其中一个或两个都失败了。 > 使用zip将请求绑定在一起。有没有办法不必被迫使用双函数,也不必返回null? 请求A和B有一个。doOnNext和。多恩。如果其中一个返回错误,zip observable是否继续?zip订阅服务器是否也会返回错误? 这是最好的方法吗?

  • 我正试图通过迁移当前使用Angular1/AngularJS编写的应用程序来提高我对Angular2的了解。 有一个特征特别难倒了我。我试图复制一个功能,其中调用函数等待继续,直到它正在调用的函数完成了一个循环的promise。在AngularJS中,我调用的函数基本上是这样的: 它包含一个调用另一个函数()的循环,该函数还返回一个promise,并将所有返回的promise存储在一个数组中。 使

  • 我有一个方法,可以为WebView的WebEngine设置一个新的网页,需要等到网页加载完成后才能继续使用当前方法。 基本上我想要: 我尝试过使用ChangeListener(),但它只会在我的方法完成执行后执行。我在谷歌上搜索了许多导致更多挫折感的术语,比如“java非阻塞等待布尔值”。最终,我成功地启动了新线程(以防止应用程序GUI锁定)并使用了倒计时(与Thread.join()相反)。下面

  • 我正在使用JavaScript处理图像。对于每个图像,我使用.toblob创建4个文件。问题在于.toblob是异步的,这样一个.toblob进程可以在其他进程完成时运行。await异步似乎不起作用。处理的图像数的计数器似乎不起作用,因为上一个图像可以处理,而前一个图像尚未完成。最后一个图像将计数器增加到图像数并触发保存。 我可以在最后一个图像上做一个setTimeout,但那只是在猜测最大时间。