キャッシングに関するこの質問と条件付きの約束に関するこの質問を見ましたが、正直なところ、約束を使用したことがないので、まだ少し混乱しています。
when.js v2.5.1と jQuery v2.0.3を使用しています。次のコードを promise に変換しようとしています (coffeescript の方がはるかに明確なので、そのまま使用しますが、javascript で自由に応答してください)。
class Loader
@files: {}
@load: (path) ->
@files[path] ?= $.ajax(url: path).responseText
次のように呼び出されます。
mytext = Loader.load "/path/to/greatness"
だから、約束を返したいのはわかっています。jQuery の xhr が遅延可能であり、Promise API を実装していることはわかっています。
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
呼び出すことができるからです…?
どんな助けでも大歓迎です。