javascript - 总是成功的 jQuery promise ?

标签 javascript jquery promise

我有这个代码 jQuery 代码片段:

$.get('/api/' + currentPage).done(function(data) { ... })
                            .fail(...)

我想将 $.get('/api/'+currentPage) 替换为始终成功并返回 data 的特定值的 Promise。像这样的东西:

let myData = { ... }  // value of data I want to pass to the done function

(new AlwaysSucceeds(myData)).done(function(data) { ... })
                            .fail(...)

我可以拼凑出一个虚拟对象,或者我可以提取出 done 函数,但我希望将对代码的更改保持在最低限度。

有办法做到这一点吗?

更新:为了帮助澄清发生了什么,我正在使用的代码是 (here) 。通常这个应用程序是由实现 /api/... 调用的 Nodejs 服务器提供的,但我将其转换为提供服务 来自静态页面服务器。我知道将从中返回什么 $.get 调用。为了保持代码的更改干净,我只想 将该行更改为:

let myData = {...}

// $.get('/api/' + currentPage) -- comment out the $.get call
(SOMETHINGHERE(myData)).done(function(data) {

SOMETHINGHERE 表达式需要实现 .done(f) 它将使用 myData 调用函数 f,然后返回 一些实现 .fail(...) 的对象什么也不做。

最佳答案

您只需将 $.get(...) 替换为一个返回已用您已有的数据解析的 Promise 的函数即可。并且,获得已解析的 jQuery Promise(使用特定值解析)的最短方法是:

$.when(myData).done(...)

在 jQuery 中执行此操作的更多教科书方法是:

$.Deferred().resolve(myData).done(...)

而且,如果您想将逻辑切换到 ES6 标准(而不是非标准 jQuery promise 行为),那么您可以使用以下内容:

Promise.resolve(myData).then(...).catch(...)

关于javascript - 总是成功的 jQuery promise ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47687421/

相关文章:

javascript - 删除 Chart.js 图表中的空格

javascript - 使用 ajax post 响应时出现错误 block

javascript - 为什么 alert(<%=myStringVariable%>);不行?

jquery - jquery mobile 中的导航栏图标问题

jquery - 动态设置从 Zebra 日期选择器后端检索的特定日期

JavaScript 串行 Promise 与 setTimeout

javascript - 来自 jquery 的嵌套原型(prototype)

c# - 在 asp.net 中设置表单元素的默认值

javascript - 有没有更清晰的方法来处理链式 Promise?

javascript - 对此行为 : ES6 Promise that is never resolved 的解释是什么