jquery - 处理异步请求的最佳方法是什么
在 C# 中,你有 await 语句来处理异步请求。我使用 TypeScript,因为我觉得使用 JavaScript 非常困难。
现在在使用 TypeScript 时,我不知道在帖子被处理后处理请求的正确方法是什么。
处理那件事的最佳方式是什么。
答案#1
TypeScript 并没有为 JavaScript 提供新的功能,它“仅仅”引入了类型。因此,你需要看看不同的 JavaScript 库是如何处理异步请求的,选择你喜欢的,并参考相应的定义文件。
对于第一部分,我假设你使用的是jQuery(因为你的问题标签也是这样)。在 jQuery 中,异步请求是通过 promise 处理的。我建议阅读文档,并在线查找其他关于如何使用它们的教程。我将在下面提供一个 TypeScript 示例。
在你选择了要使用的 JavaScript 库之后,你需要一个 TypeScript 定义文件(*.d.ts)。基本上,这相当于一个 C 语言的头文件。定义文件会告诉 TypeScript 编译器,存在某些作用域、变量和方法,而无需提供 TypeScript 实现。以 jQuery 定义文件为例,它会告诉编译器存在一个名为 $ 的作用域,以及该作用域上定义的所有变量和方法。一个由社区维护的定义文件仓库可以在这里找到。它还包括如何在项目中引用这些文件的文档。
最后,你需要在你的 TypeScript 代码中使用 Promise,下面是示例代码。
$.post("http://www.hateverurl.dom", options).done(() => {
// the POST request has finished succesfully when this method is invoked.
})
答案#2
TypeScript 计划同时支持 async 关键字(1.7)和 ECMAScript 6 的向后编译(2.0)。与此同时,Q 和 RSVP 都遵循 Promises/A+ 标准,并且两者的类型定义都可以从 Definitely Typed 获取。
深入
有一个提议是将 async 关键字引入 TypeScript。
此功能计划成为 TypeScript 1.7 的一部分(不保证)。
真正的好消息是,事实上会有一个向后编译到 ES5(这已经安排在 TypeScript 2.0)。这并不是 TypeScript 唯一的向后编译,所以不要太在意那些说 TypeScript 除了类型之外没有为 JavaScript 增加任何东西的人——例如,许多 ECMAScript 6 特性的 polyfill 已经可用或计划中(但不限于此):
import * from 'module';let- 发电机
- 异步/承诺
- 解构
现在,甚至偶尔会有 ECMAScript 7 的特性出现在路线图上,在 TypeScript 1.7 中。
