ajax - Promise 和 AJAX 有什么区别?

标签 ajax asynchronous promise

Promise 和 AJAX 调用都是异步操作。两者都可以发出 GET/POST 请求。 << 编辑:这是一个错误的陈述

那么它们之间有什么区别呢?什么时候最好使用一个而不是另一个?

另外,还有一件事:

最近我遇到了一个promise,它的主体中有一个AJAX。为什么将异步操作放在异步操作中?这就像把面包放在面包三明治里。

function threadsGet() {
return new Promise((resolve, reject) => {
  $.getJSON('api/threads')
    .done(resolve)
    .fail(reject);
    })
}

这里使用 jQuery。 AJAX 调用具有 Promise 行为和属性。我之前没有得到,但这是我的想法:
我们可以在 Promise 中做一些事情。然后使用 AJAX 调用并在 done函数传递已解决的 Promise 逻辑。特别是在这个例子中没有。

现在我发现我把两者都搞混了。它们几乎是两种不同的东西。仅仅因为它们是异步的,并不意味着它们是可互换的。

===============

编辑 2:只是一些我发现有用的 Material :

Promise Anti-Patterns

最佳答案

您对 Promise 和 Ajax 调用感到困惑。它们有点像苹果和刀。你可以用刀切苹果,刀是一种可以应用于苹果的工具,但两者是完全不同的东西。

Promise 是一种管理异步操作的工具。它们跟踪异步操作何时完成以及它们的结果是什么,并让您将完成和这些结果(包括错误条件)与其他代码或其他异步操作进行协调。它们本身实际上并不是异步操作。 Ajax 调用是一种特定的异步操作,可以与传统的回调接口(interface)一起使用,也可以包装在 Promise 接口(interface)中。

So what's the difference between them? And when would be best to use one instead of the other?



Ajax 调用是一种特定类型的异步操作。您可以使用 XMLHttpRequest interface 使用传统回调进行 Ajax 调用。或者您可以使用带有 fetch() interface 的 promise 进行 Ajax 调用(在现代浏览器中) .

Recently I encountered a promise which had an AJAX in its body. Why put an async operation inside an async operation? That's like putting a bread loaf in a bread sandwich.



您没有显示您正在谈论的特定代码,但有时您想启动异步操作 1,然后当该异步操作完成时,您希望他们启动异步操作 2(通常使用第一个操作的结果)。在这种情况下,您通常会将一个嵌套在另一个内部。

您的代码示例在这里:
function threadsGet() {
    return new Promise((resolve, reject) => {
      $.getJSON('api/threads')
        .done(resolve)
        .fail(reject);
      })
}

被认为是一个 Promise 反模式。没有理由在这里创建一个新的 promise ,因为 $.getJSON()已经返回一个你可以返回的 promise 。你可以这样做:
function threadsGet() {
    return $.getJSON('api/threads');
}

或者,如果你想将有点不标准的 jQuery promise “转换”为标准 promise ,你可以这样做:
function threadsGet() {
    return Promise.resolve($.getJSON('api/threads'));
}

关于ajax - Promise 和 AJAX 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39751395/

相关文章:

jquery - 带有 $.ajax 的 MVC 无参数操作方法不返回结果

java - 在 Java 中使用 Redis 异步命令对 void 方法进行单元测试

javascript - 如何在 1 个函数中多次调用语音识别?

javascript - Ajax post请求漏洞

javascript - 将文件从 Apache 提供给 Javascript

javascript - 如何使用ajax正确地将json发送到RestController?

node.js - Node 牛队列错误: Missing process handler for job type JOB_NAME

Flutter:如何在 dart 的后台线程上运行函数

javascript 链接 promise 澄清

javascript - promise 链扩展