2016-07-06 15 views
-3

このPromiseの結果だけでなく、呼び出された繰り返し可能性のあるurlも返したいと思います。 urlsはURLの配列です。Promise.allでResolveで繰り返し返す

function findMainLink(urls) { 
    return Promise.all(urls.map((url) => { 
    var result = nightmare 
    .goto(url) 
    .wait('#main') 
    .evaluate(function() { 
     return document.querySelector('#main a').href; 
    }); 

    nightmare.end() 
    return result 
    } 
} 

vo(findMainLink)([ 
'https://yahoo.com', 
'https://google.com' 
]) 
.then(res => console.log(res)) 
.catch(e => console.error(e)) 

私はそれが解決しないreturn {result,url}を行う代わりに、約束の現在の状態を私に戻って与えたとき。どのように結果にURLを含めるのですか?

+0

私はnpmパッケージの悪夢から約束事を受けています。私は同時にウェブサイトを訪問したいと考えています。私は悪夢の機能と呼ばれるURLを含めるといいです – warg

+0

それはあなたが投稿したコードと正確に何をしていますか? –

+0

あなたは実際に私たちにあなたの実際のコードを提示してください。 – Bergi

答えて

2

タプルを約束してPromise.allではありませんので、何がしたいことは、

function findMainLink(urls) { 
    return Promise.all(urls.map((url) => { 
    var result = nightmare 
     .goto(url) 
     .wait('#main') 
     .evaluate(function() { 
     return document.querySelector('#main a').href; 
     }); 

    nightmare.end(); 
    return result; 
    }) 
    .then(results => results.map((result, i) => ({result, url[i]})); 
} 

動作しませんもちろんのPromise.allにタプルの配列を渡すでは、tuple内部を見ることになっています知る方法はありません。代わりに、上のコードは解決するすべての約束を待ってから、結果をマップして、タプルの配列を返します(そしてその約束を返します)。

+0

うん、それはうまくいくだろう。私は 'return result.then(result => {result、url})'をやっていると思っていたが、同じ結果です –

+0

あなたのものはちょっときれいかもしれません。軽い構文の注釈は 'result =>({result、url})'にする必要があります。 –

+0

ありがとうございました:) – warg