私はdrakma-async
小さなプロジェクトで使用しようとしています。しかし、私は何が起こっているのか理解できません。(私はemacs +スライム+ cclを使用しています)。http(s) でデータを取得し、コールバックで解析する必要があります。解析できない間違ったデータを取得する可能性があると思いますので、再試行したいと思います。しかし、いくつかのテストをしようとしたとき、何が起こっているのか理解できません...
(defun my-callback (data)
(prin1 data)
(restart-case
(error "Some error parsing data...")
(just-continue () (prin1 "Continue..."))))
(defun simple-test ()
(let ((future (asf:make-future)))
(as:delay #'(lambda () (asf:finish future "Some data")) :time 2)
(prin1 (asf:future-finished-p future))
(asf:attach future #'my-callback)))
(defun drakma-test ()
(asf:alet ((response (das:http-request "http://www.google.com")))
;(prin1 (asf:future-finished-p response))
(asf:attach response #'my-callback)))
(defun drakma-test-let ()
(let ((response (das:http-request "http://www.google.com")))
;(prin1 (asf:future-finished-p response))
(asf:attach response #'my-callback)))
(defun run-test (test)
(as:start-event-loop test))
1)だから私はそれが私の簡単な例で持っているものです(それは私が計画したものです)
? (run-test #'simple-test)
NIL"Some data" ;I get debugger here with simple-error and choose my restart
Invoking restart: #<RESTART JUST-CONTINUE #x7F0578EC20AD>
"Continue..."
1
2)2番目のテストで得たもの:
? (run-test #'drakma-test)
"<A LOT OF HTML>
"
1
デバッガーと再起動はどこにありますか?
;(prin1 (asf:future...))
3) の行のコメントを外しますdrakma-test
? (run-test #'drakma-test)
1
終了/未終了のブール値はありません。データは出力されません。再起動は行われません1
。結果として得られるだけです。
(let ((reponse (das:http-request "http://www.google.com"))) ... )
4)代わりに書き込みを行うと(asf:alet ...)
、オブジェクトresponse
は含まれませんfuture
が、リクエストが終了してデータが含まれるまでブロックresponse
されます。
? (run-test #'drakma-test-let)
1
;(prin1 (asf:future...))
5) の行のコメントを外しますdrakma-test-let
? (run-test #'drakma-test-let)
NIL ;future is not finished
1
データは印刷されません。それだけでは完了していません。実行テストの結果です。
cl-async のテストを実行しましたが、ipv6 テストを除いてすべて合格しました。だから、何が起こっているのかを理解するためにどこから始めればいいのかわからない...なぜデバッガーを取得せず、2番目のテストで再起動するのですか? 3 回目のテストで何も起こらない理由 (2 回目と同じですが、prin1 を使用)。5 回目と 5 回目のテストで何も起こらないのはなぜですか?
PSこのライブラリを作成drakma-async
またはタグ付けするのに十分な評判がありません。cl-async
私はそれdrakma-async
が構築されていることを知っているdrakma
ので、このタグを付けました。