javascript - 具有链式 AJAX 调用的条件逻辑

标签 javascript jquery ajax

我有一个页面,可以从多个已保存的 Instagram 源加载帖子。 Feed 对象如下所示:

{'feed_type' : 'search', 'feed_term' : '#cars'}
{'feed_type' : 'profile', 'feed_term' : 'FerrariOfficial'}

如果提要与 Instagram 个人资料相关而不是话题标签,我们需要首先在 Instagram API 中查询该用户名的 ID(因为 Instagram 不允许按用户名查询)。

页面上还有一个用于添加新提要的表单,我想在添加提要后重用这些检查和显示方法。

我有以下功能:

getInstagramIdFromUsername()
displayPosts()
addNewFeed()

理想情况下,这将是主要逻辑:

onLoad() {
    // for each feed...
    if (f.feed_type == "profile") {
        getInstagramIdFromUsername(f);
    }
    displayPosts(f);
}

onAddFeedFormSubmitted(f) {
    if (f.feed_type == "profile") {
        getInstagramIdFromUsername(f);
    }
    addNewFeed(f);
    displayPosts(f);
}

但是,我在构建逻辑时遇到了麻烦,因为所有这些函数都是异步 AJAX 调用。最好的方法是什么?我应该使用 jQuery 的 Deferred Object在这里?

最佳答案

如果函数是异步的,您应该添加回调功能;

getInstagramIdFromUsername(callback)

回调获取在获取提要后执行,因此您可以像这样:

onLoad() {
    if (feed_type == "profile") {
        getInstagramIdFromUsername(function() {displayPosts();});
    } else { 
        displayPosts();
    }
}

关于javascript - 具有链式 AJAX 调用的条件逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43436307/

相关文章:

javascript - json_decode 期望参数 1 是字符串,表示给出了数组。为什么我的字符串不能正常通过?

javascript - ember 转换 ajax 查询字符串

javascript - Typescript: `let result: { [key: T[K]]: T } = {};` 不起作用,如何根据泛型键入我的对象?

php - 在 for 循环中提取 PHP 数组值并传递给 JQuery

javascript - 显示带有书签的隐藏 div

用于减慢滚动速度的 Javascript 函数

javascript - AJAX 和辅助功能 : focus or tab index on active element

javascript - 单击按钮时函数不会重新呈现

javascript - jQuery 脚本无法正常运行

javascript - 如何同时声明很多document.getElementById变量