私はPromise
を持っていますが、データを使用しようとすると非同期呼び出しが完了していないため、機能しません。Javascript Promise Anti-pattern
私はPromise ant-patternsでhereを探しています。これは私の修正です。しかし、私はJavascriptで弱いので、私は彼らの提案を実装するのに苦労しています。誰かが助けることができれば、私はそれを感謝します。
マイコード:
private findLocalChatsWithLastMessageForChat(): Promise<Mongo.Collection<Chat>> {
let promise: Promise<Mongo.Collection<Chat>> = new Promise<Mongo.Collection<Chat>>(resolve => {
let localChatCollection: Mongo.Collection<Chat> = new Mongo.Collection<Chat>(null);
for (let i: number = 0; i < this.chatsStorageService.chats.length; i++) {
let chat: Chat = this.chatsStorageService.chats[i];
let findLastMessageForChatPromise: Promise<Message> = this.chatsStorageService.findLastMessageForChat(chat);
findLastMessageForChatPromise.then((data) => {
let message: Message = data;
chat.lastMessage = message;
chat.lastMessageCreatedAt = message.createdAt;
localChatCollection.insert(chat);
});
}
resolve(localChatCollection);
});
return promise;
}
あなたが見ることができるようにthis.chatsStorageService.findLastMessageForChat
約束が終了する前に、約束は、呼び出し元の関数に戻ります。 hereを読む
は、このソリューションを提供しています:
function workMyCollection(arr) {
return q.all(arr.map(function(item) {
return doSomethingAsync(item);
}));
}
しかし、私は私の活字体のコードを修正する方法がわかりません。
おかげ
ありがとうございます。 – Richard
ハムを試してみましょう。あなたの 'chat'変数に何らかの問題があります。私の答えは –
が更新されます;) 'chat'は今すぐOKです –