promises和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:我觉得有些材料很有用:
答案 0 :(得分:57)
您对promises和Ajax调用感到困惑。它们有点像苹果和刀子。你可以用刀切苹果,刀是一种可以应用于苹果的工具,但两者是非常不同的东西。
Promises是一种管理异步操作的工具。它们跟踪异步操作何时完成以及它们的结果是什么,并让您与其他代码或其他异步操作协调完成和那些结果(包括错误条件)。它们本身并不是异步操作。 Ajax调用是一种特定的异步操作,可以与传统的回调接口一起使用,也可以包含在promise接口中。
那么它们之间的区别是什么?什么时候最好用 一个而不是另一个?
Ajax调用是一种特定类型的异步操作。您可以使用XMLHttpRequest
interface使用传统回调进行Ajax调用,也可以使用fetch()
interface的承诺进行Ajax调用(在现代浏览器中)。
最近我遇到了一个承诺,其中包含一个AJAX。为什么 在异步操作中放置异步操作?那就像放 面包三明治里的面包。
您没有显示您正在讨论的具体代码,但有时您想要启动异步操作1然后当异步操作完成时,您希望它们启动异步操作2(通常使用第一个的结果)一)。在这种情况下,您通常会将一个嵌套在另一个内部。
您的代码示例:
function threadsGet() {
return new Promise((resolve, reject) => {
$.getJSON('api/threads')
.done(resolve)
.fail(reject);
})
}
被认为是一种承诺反模式。这里没有理由创建新的承诺,因为$.getJSON()
已经返回了一个可以返回的承诺。你可以这样做:
function threadsGet() {
return $.getJSON('api/threads');
}
或者,如果您想将某些非标准的jQuery承诺“强制转换”为标准承诺,您可以这样做:
function threadsGet() {
return Promise.resolve($.getJSON('api/threads'));
}