我看了这个关于缓存的问题和这个关于条件承诺的问题,但老实说,我仍然有点困惑,因为我以前从未使用过承诺。
我正在使用when.js v2.5.1和 jQuery v2.0.3。我正在尝试将以下代码转换为承诺(coffeescript 中它更清晰,所以我会坚持下去,但随时用 javascript 回复)
class Loader
@files: {}
@load: (path) ->
@files[path] ?= $.ajax(url: path).responseText
像这样称呼:
mytext = Loader.load "/path/to/greatness"
所以,我知道我想回报一个承诺。我知道 jQuery 的 xhr 是可延迟的并且实现了 Promise API Something,所以我可以做这样的事情吗?
class Loader
@files: {}
@load: (path) ->
if @files[path]
deferred = When.defer()
deferred.resolve @files[path]
deferred.promise
else
$.ajax(url: path).done (data)=>
@files[path] = xhr.responseText
因为无论返回什么都可以then
调用它……?
任何帮助深表感谢。