2017-12-11 20 views
0

Promise.all関数を使用して、複数の約束を同時に解決しています。以下のコードを参照してください -Promise.All関数の呼び出しの問題

function check1() { 
    console.log('check 1 invoked') 
    return new Promise((resolve, reject) => { 
    setTimeout(()=> resolve('check1'), 4000); 
    }) 
} 

function check2() { 
    console.log('check2 invoked') 
    return new Promise((resolve, reject) => { 
    setTimeout(()=> resolve('check2'), 4000); 
    }) 
} 

var arr = [check1(), check2()]; 

Promise.all(arr) 
.then((response) => console.log('response======>',response)) 
.catch((error) => console.error('error',error)) 

上記のアプローチの問題は、私は約束の配列を作成するときに、それぞれの機能が呼び出されるということです。私は2つの関数がpromise.all関数からのみ呼び出すように上記のコードを変更したいと思います。

注 - 約束関数を配列に格納する必要があります。私がvar arrとしてやっているように。

+3

'arr = [check1、check2]; Promise.all(arr.map(a => a()).then ... '? – Sirko

+1

' check1() '_calls_' check1'関数がすぐそこにあります。これはあなたが望むものではありません。関数は関数を呼び出して後で呼び出すことができます。単純に '()'を省略することで得ることができます。 –

答えて

1

これは、それを行う必要がある約束の配列を作るが、関数の配列、そして約束に機能をマップしない:

function check1() { 
    console.log('check 1 invoked') 
    return new Promise((resolve, reject) => { 
    setTimeout(()=> resolve('check1'), 4000); 
    }) 
} 

function check2() { 
    console.log('check2 invoked') 
    return new Promise((resolve, reject) => { 
    setTimeout(()=> resolve('check2'), 4000); 
    }) 
} 
//do not store the promises, store the funciton that creates a promise 
var arr = [check1, check2]; 

Promise.all(
    //map functions to promises 
    arr.map(fn=>fn()) 
) 
.then((response) => console.log('response======>',response)) 
.catch((error) => console.error('error',error)) 
+0

答えをありがとう。 – Shubham

-1

あなたもこの方法で行うことができます -

var check1 = new Promise((resolve, reject) => { 
     setTimeout(()=> resolve('check1'), 4000); 
    }); 
    var check2 = new Promise((resolve, reject) => { 
     setTimeout(()=> resolve('check2'), 4000); 
    }); 
    Promise.all([check1, check2]).then(values => { 
     console.log(values); 
    }, reason => { 
     console.log(reason) 
    }); 
関連する問題