2017-11-03 8 views
0

配列内のすべてのユーザーに対してパスワードをbcryptしようとしています。array.map javascript内でのコールバック関数の使用

router.post("/insertuser", (req, res) => { 

    var promises = users.map((item) => { 

    bcrypt.genSalt(10) 
     .then((salt) => { 
     return item 
     })  
    }) 

    Promise.all(promises) 
    .then((results) => { 
     console.log(results) 
     res.json({ 
     "data": results 
     }) 
    })  
})//end route 

しかし、結果は[未定義、未定義]です。

どのように私はbcrypt.genSalt(10).then

から配列要素を返すことができます私はES6

EDITに新しいですよう助けてください:

:私のユーザーのユーザー・アレイは、このようなものですが

[{"username": "admin"、 "admin":true} ]

+1

地図のコールバックは、それゆえ、約束はundefined' 'の配列になり、何も返さない - あなたはここで'(アイテム)=> {/ *で何かを返す必要があります*/} ' –

+0

どうすれば修正できますか?私はこれに新しいです。助けてください。 – raju

+2

...おそらく 'return bcrypt.genSalt(10)' - あなたが**返す**何かを返す –

答えて

1

bcrypt.genSaltから約束を返すだけです。

router.post("/insertuser", (req, res) => { 

    var promises = users.map((item) => { 

    return bcrypt.genSalt(10) 
     .then((salt) => { 
     return item 
     })  
    }) 

    Promise.all(promises) 
    .then((results) => { 
     console.log(results) 
     res.json({ 
     "data": results 
     }) 
    })  
})//end route 
+1

'bcrypt.genSaltの結果を返すだけです.' - 実際にはプロミスを返します。結果は返されません。解決された値は' item'になります。 –

+0

ありがとうございます。あなたは私の一日を救った。 – raju

0

あなたはそれを直接解決を取得する任意の約束後.then()を追加します。あなたのコードでは、users.map()は同期して実行され、約束は未定義になります。ここ は、使用できるコードです:

router.post("/insertuser", (req, res) => { 
    var promises = users.map((item) => { 
     return bcrypt.genSalt(10); 
    }) 

    Promise.all(promises) 
     .then((results) => { 
     console.log(results) 
    }); 
})// 

はまた、塩は、ハッシュを生成するために使用されていることに気づきます。あなたは塩を生成しているだけです。パスワードのハッシュを生成するには、bcrypt.hash(password,salt)も追加します。ここでは、コードは次のとおりです。

var promises = users.map((item) => { 
    return bcrypt.genSalt(10); 
}) 

Promise.all(promises) 
    .then((results) => { 
    promises = results.map((item, index) => { 
     return bcrypt.hash(users[index], item); 
    }); 
    return Promise.all(promises); 
    }) 
    .then(result => { 
    console.log(result); 
    }) 
    .catch(err => { 
    console.log(err); 
    }); 
関連する問題