この言語をよりよく理解するために、私は Hacker News API を使用するクライアントの構築に取り組み始めました。以下のコードは、求人フィードから最初の 10 項目を取得することになっています。最初に ID のリストを収集し、それらの ID を反復処理して、アイテムの詳細を取得するための非同期リクエストを作成します。これにより、完了時にコールバック関数が起動されます。そのすべてがうまく機能しています。ただし、このようにネストされている場合、render 関数は何も返さないようです。このルートに到達すると、次のエラー メッセージが表示されます。The view feed.views.index didn't return an HttpResponse object. It returned None instead.
Node でこれをコーディングしていた場合、問題なく動作するので、言語 (またはフレームワーク) が非同期要求やスコープでどのように処理するかを理解していないことが原因であると想定しています。私は何を間違っていますか?
def index(request):
job_ids = firebase.get('jobstories', None)
stories = []
def append_story(story):
stories.append(story)
print(len(stories))
if len(stories) == 10:
return render(request, 'feed/index.html', {'items': stories})
count = 0
for ts_id in job_ids:
if count < 10:
count += 1
firebase.get_async('item/' + str(ts_id), None, callback=append_story)