2017-10-27 2 views
-1

パラメータ:Promise.resolve()パス・コールバックは、この場合には約束から値を返すためにどのよう

async foo() { 
    let [error, data] = await this.promiseFoo(); 
.... 
} 

promiseFoo() { 
    return Promise.resolve(this.asyncFoo()).then((error, data) => 
    [error, data]); 
} 

then()内未定義のエラーやデータの取得します。 asyncFooからエラーとデータを返すにはどうしたらいいですか?コールバックはそれはのように見える時:this.asyncFoo((error, data) => {...});

しかし、私は、コールバックにこの時間を使って何を避けるために。

+0

を探している 'asyncFoo'が** **引数としてコールバックを取ると思います。あなたはBluebirdのような図書館にある 'promisify'に興味があるかもしれません。あるいは、新しいPromiseを作成するasyncFoo用のラッパーを作成します。 – cubrr

+0

約束は*両方*エラーと結果を解決することはありません。なぜあなたはそれらをペアとして返すのですか?なぜ普通の 'try {let data = await this.asyncFoo();}を使わないのですか? ...} catch(エラー){...} '? – Bergi

+0

それはエラーとデータの両方を返すために、ビジネスロジックのために必要だ – MolecularMan

答えて

1

にごpromiseFooを変更してみてください、私はあなたが

promiseFoo() { 
    return this.asyncFoo().then(data => [null, data], error => [error, null]); 
} 
+0

はよくあなたの答えは、彼がキャッチしようとやってみたかったが、彼は決意などのエラーを取得したいと場合は正しかったのではないonrejectedハンドラが同様に返された約束を果たし@AmitWagnerキャッチ –

+2

として?コードはあなたの答えとほとんど同じですが、より安全で、簡単で、短く、効率的です。 – Bergi

+0

は、私はあなたが言ったことを確認し、その作品を素晴らしいです。悪い私は前にそれを知らなかった。 [.then( '違い...、...)'と '.then(...).catch(...)'](https://stackoverflow.com/を参照してください@AmitWagner –

0

promiseFoo() { 
 
    return new Promise ((resolve,reject) =>{ 
 
    asyncFoo() 
 
    .then(data =>{ 
 
     resolve([null, data]) 
 
    } ) 
 
    .catch(err =>{ 
 
     resolve([err,null]) 
 
    }) 
 
    }) 
 
}

+0

[ 'Promise'コンストラクタアンチパターン]を(避けhttps://stackoverflow.com/q/23803743/1048572?What-is-the-promise-construction-antipattern-and -how-to-avoid-it)! – Bergi

関連する問題