2017-05-17 29 views
0

私のtypescript関数は以下の通りです。 2番目の関数は、vscodeの編集中にエラーメッセージを表示しませんでした。Typescriptコンパイルエラー:タイプ 'Item []'に 'void'型が割り当てられません

error TS2322: Type 'Promise<void>' is not assignable to type 'Promise<Item[]>'. 
     Type 'void' is not assignable to type 'Item[]'. 

私は.catch(...)を削除する場合:私はそれをコンパイルするときしかし、第二の機能は、エラーが表示されます。エラーは消えます。誰でも助けてくれますか?

// To retrieve a single item. 
// Q is https://github.com/kriskowal/q 
function getItem(id: number): Q.Promise<Item> { 
    const deferred = Q.defer<Item>(); 
    // Async process. 
    return deferred.promise; 
} 

// To retrieve a batch of items. 
function getItems(ids: number[]): Q.Promise<Item[]> { 
    return Q.all(ids.map(id => { 
     return getSingleItem(id); 
    })).then(results => { 
     let items = []; 
     results.forEach(result => { 
      items = items.concat(result); 
     }); 
     return items; 
    }).catch(error => { 
     throw error; 
    }); 
} 
+0

'ids.map(id => {{}})の後ろに右括弧がありません。 – dbandstra

+0

タイポを指摘していただきありがとうございます。 StackOverflowで変更しました。 – Michael

+0

他者があなたの経験を再現できるように、 'Q'の宣言を追加すると便利かもしれません。約束の経験がなければ、どの実装を使用しているのかは不明です。 –

答えて

0

これは完璧な答えではありません。しかし、それは動作します。 2つの回避策があります。 1.返品Q.Promise<any>、これはうまくいきません。怒鳴る

// To retrieve a batch of items. 
function getItems(ids: number[]): Q.Promise<Item[]> { 
    const deferred = Q.defer<Item[]>(); 
    return Q.all(ids.map(id => { 
     return getSingleItem(id); 
    })).then(results => { 
     let items = []; 
     results.forEach(result => { 
      items = items.concat(result); 
     }); 
     deferred.resolve(items); 
    }).catch(error => { 
     // Wrapped error in defer. 
     deferred.reject(error); 
    }); 
    return deferred.promise; 
} 

ようdeferred.reject(エラー)で 2.ラップエラーはとにかく、それは理想的なソリューションではありません。今のところ、迅速な解決策が必要な人だけをブロックすることができます。

関連する問題