当前位置: 首页 > 面试题库 >

设计流畅的Javascript接口以抽象化AJAX的异步特性

姬飞昂
2023-03-14
问题内容

我将如何设计一个API以隐藏AJAX和HTTP请求的异步特性,或者基本上将其延迟以提供一个流畅的接口。要显示来自Twitter新的Anywhere API 的示例:

// get @ded's first 20 statuses, filter only the tweets that
// mention photography, and render each into an HTML element
T.User.find('ded').timeline().first(20).filter(filterer).each(function(status) {
    $('div#tweets').append('<p>' + status.text + '</p>');
});

function filterer(status) {
    return status.text.match(/photography/);
}

与此相对(每个呼叫的异步性质都清晰可见)

T.User.find('ded', function(user) {
    user.timeline(function(statuses) {
        statuses.first(20).filter(filterer).each(function(status) {
            $('div#tweets').append('<p>' + status.text + '</p>');
        });
    });
});

function filterer(status) {
    return status.text.match(/photography/);
}

它找到用户,获取其tweet时间轴,仅过滤前20条tweet,应用自定义过滤器,最终使用回调函数处理每个tweet。

我想这样设计良好的API应该像查询生成器(认为是ORM)那样工作,其中每个函数调用都会生成查询(在这种情况下为HTTP URL),直到遇到诸如each /
map / etc之类的循环函数为止,进行HTTP调用,传入的函数成为回调。

一个简单的开发途径是使每个AJAX调用同步,但这可能不是最佳解决方案。我有兴趣想出一种使它异步的方法,并且仍然隐藏AJAX的异步特性。


问题答案:

看一下几天前Twitter工程师Dustin Diaz在@anywhere上发表的以下文章:

  • JavaScript中的异步方法队列链接

他谈论了一种非常好的技术,它允许您使用一个非常简单的Queue实现在异步方法上实现流利的接口,这些方法基本上是独立于回调而链接在一起的方法。



 类似资料:
  • 问题内容: 我有许多类,它们都共享相同的方法,只是实现方式不同。在Java中,让这些类中的每一个实现一个接口或扩展一个抽象类都是有意义的。Python是否有与此类似的东西,还是我应该采用其他方法? 问题答案: Python接口背后有一个故事。多年来一直保持主导地位的原始态度是您不需要它们:Python在EAFP(更容易要求宽恕而不是允许)原则上工作。也就是说,无需指定接受一个I​​Closeno

  • 抽象异步模型 对回调模型抽象出异步接口Async。 只有一个方法的接口通常都可以使用闭包代替,区别在于interface引入新类型,闭包则不会。如果说thunkify依赖了参数顺序的弱约定,Async相对严肃的依赖了类型。 <?php interface Async { public function begin(callable $callback); } // AsyncTask符

  • 问题内容: 考虑一个示例(在Java中编译) 为什么必须将接口“声明”为抽象的?还有其他适用于抽象接口的规则吗? 最后:如果过时了,为什么将它包含在Java中?有抽象接口的历史吗? 问题答案: 为什么必须将接口“声明”为抽象的? 不是。 接口及其方法是隐式的,添加该修饰符没有区别。 还有其他适用于抽象接口的规则吗? 不,适用相同的规则。该方法必须由任何(具体)实现类来实现。 如果抽象已经过时,为什

  • 我想读关于抽象的文章,但读到不同的文章,我感到很困惑。 下面是我无法理解的问题: 1)“抽象是通过使用抽象类和接口实现的吗?”我对此进行了搜索,得到了三种类型的答案: 与此处解释的不同。 它们是相同的,只是不同的观点,就像这里解释的。 最后一个是抽象类用来实现抽象。 哪一个是真的?请举一个简单的例子。 2)“抽象意味着隐藏不必要的细节。比如专注于一个对象做什么而不是它是如何完成的。” 这是正确的吗

  • 本文向大家介绍C# 抽象类abstract class与接口interface的异同相关面试题,主要包含被问及C# 抽象类abstract class与接口interface的异同时的应答技巧和注意事项,需要的朋友参考一下 相同点: (1)都可以被继承 (2)都不能被实例化 (3)都可以包含方法的声明 不同点: (1)抽象类被子类继承;接口被类实现 (2)抽象类只能被单个类继承;接口可继承接口,并

  • 本文向大家介绍详解PHP的抽象类和抽象方法以及接口总结,包括了详解PHP的抽象类和抽象方法以及接口总结的使用技巧和注意事项,需要的朋友参考一下 PHP中的抽象类和抽象方法自己用的不多,但是经常会在项目中看到别人使用,同样,今天在看别人的代码的时候,发现使用了抽象类,就总结下: 抽象类: 1、如果一个类中有一个方法是抽象方法,则这个类就是抽象类; 2、抽象类必须加上abstract关键字修饰; 抽象