我有这个代码 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/