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

Promise和AJAX有什么区别?

芮意
2023-03-14
问题内容

Promise和AJAX调用都是异步操作。两者都可以进行GET / POST请求。<< 编辑:那是错误的陈述

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

另外,还有一件事:

最近,我遇到了一个承诺,其中包含AJAX。为什么要在异步操作中放入异步操作?这就像在面包三明治中放一块面包。

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

此处使用jQuery。并且AJAX调用具有Promise行为和属性。我没有早些得到,但是这里是我的想法:我们可以在Promise中做点什么。然后使用AJAX调用,并在done函数中传递已解决的Promise逻辑。特别是在此示例中,没有任何内容。

现在我看到我已经混淆了两者。它们几乎是2种不同的东西。仅仅因为它们是异步的,并不意味着它们是可互换的。

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

编辑2: 我发现一些有用的材料:

承诺反模式


问题答案:

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

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

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

Ajax调用是一种特定类型的异步操作。您可以使用使Ajax调用或者与传统的回调XMLHttpRequest接口,也可以使Ajax调用(在现代浏览器),使用与承诺fetch()接口。

最近,我遇到了一个承诺,其中包含AJAX。为什么要在异步操作中放入异步操作?这就像在面包三明治中放一块面包。

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

您的代码示例在这里:

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

被认为是一种承诺反模式。没有必要在此处创建新的诺言,因为$.getJSON()已经返回了您可以返回的诺言。您可以改为:

function threadsGet() {
    return $.getJSON('api/threads');
}

或者,如果您想将有些非标准的jQuery Promise“转换”为标准Promise,则可以执行以下操作:

function threadsGet() {
    return Promise.resolve($.getJSON('api/threads'));
}


 类似资料:
  • 和之间有什么区别? 它们都像未来结果的占位符,但是主要区别在哪里?

  • 问题内容: 我已经在移动应用程序和Web应用程序中使用过ECMAScript 6 和ECMAScript 7功能(由于Babel)。 第一步显然是达到ECMAScript 6级别。我学习了许多异步模式,promise(确实是很有希望的),生成器(不确定为什么使用*符号)等。其中,promise非常适合我的目的。而且我已经在我的应用程序中使用它们很多次了。 这是我如何实现基本诺言的示例/伪代码- 随

  • 问题内容: 据我所知并纠正我是否有错,redux-thunk是一个中间件,可以帮助我们在操作本身中调度异步函数并调试值,而当我使用redux- promise时 ,如果不实现自己的实现就无法创建异步函数作为Action的机制抛出仅分配纯对象的异常。 这两个软件包之间的主要区别是什么?在单个页面react应用程序中使用这两个软件包或坚持redux-thunk就足够了吗? 问题答案: 允许您的动作创建

  • 可能的重复: 在JavaScript中Deferred、Promise和Future之间有什么区别? 有人能指出回调和promise之间有什么不同吗?什么时候应该使用promise等? 此外,关于如何创建和使用promise的链接将得到赞赏。

  • 问题内容: 我想通过获取发送发帖请求,但是不起作用。 但是,如果我通过jQuery ajax做到这一点,它将成功。 我想知道两种方式的区别,以及我在这里使用fetch时是否有任何错误: 问题答案: 规范主要在两个方面有所不同: 即使响应是HTTP 404或500,从fetch()返回的Promise也不会拒绝HTTP错误状态。相反,它将正常解析(ok状态设置为false),并且仅在网络故障或失败时

  • 我通常会在vert. x垂直的开头看到Promise和Future的使用。两者之间有什么具体的区别吗?我在Scala语言中读到过它们的差异,在Vert. x的情况下也是如此吗?还有我什么时候应该知道什么时候使用Promise或未来?