2017-07-20 2 views
1

私は2つのMongooseクエリを持っており、.lean()を使用するのが最善であると判断しました。単一のドキュメントを返す1についてはTypeScriptで配列を返すmongooseクエリで `lean`を使用する

、それが正常に動作するようです:

let something:Something; 
SomethingDocument.findOne({_id:theId}).lean().then((res) => { something = res;}); 

私は複数の結果を返すクエリでそれを使用しようとすると問題がある:

let somethings:Something[]; 
SomethingDocument.find({color:'blue'}).lean().then((res) => { somethings = res;}); 

2番目の呼び出しでエラーが返されます。

Type 'Object' is not assignable to type 'Something[]'. 
    The 'Object' type is assignable to very few other types. Did you mean to use the 'any' type instead? 
    Property 'length' is missing in type 'Object'. 

型変換を実行しようとすると、タイプ 'Object'に 'length'プロパティがありません。

結果の配列が期待される場合はどうすればleanを使用しますか?

...私が単にleanを省略すると、すべて動作します。

let somethings:Something[]; 
SomethingDocument.find({color:'blue'}).lean().then((res) => { somethings = res as any;}); 

そして、あなたができる場合の方法によって、私はawaitを使用することをお勧めします(TSをコンパイルする必要があります:あなたはこれを使用して、それを修正することができるように

答えて

2

マングース型定義は、とても良い私見ではありません)現代のECMAバージョンへ:

const somethings = await SomethingDocument.find({color:'blue'}).lean() as Something[]; 

注以前のバージョンが.catch上でエラーをキャッチしますが、二番目が例外をスローすること。

+0

私は実際にその正確な状況で待っていますが、質問を複雑にしたくありませんでした。私は実際に、返された約束の配列に 'Promise.all'を使う方が簡単だと分かっています。' Promise.all'より好きな 'await'について具体的なものがありますか?私は約束事を管理しなければならないと思いますが、それ以外の理由はありますか?読みやすさ?私が言うように、私はそれに反対していません - 私はそれを使用しています - しかし、私はそれについて私の心を作っていません。 – WillyC

+3

Awaitはあなたのコードに構文上の変更を導入します。これは新しい議論の話題なので、その使用法とそれを使用することの意義についてよりよく研究する必要があります。私はそれをより短く、より短く読むことを指摘しました。また、 'await'を' Promise.all'の結果と組み合わせて使うこともできます。 – lilezek

関連する問題