2016-12-15 25 views
0

私の頭を非同期にラップします。これは非同期環境で動作しますか?これはnodejsで非同期で動作しますか?

paramを投稿して確認し、毎回投稿にtrueまたはfalseを返すか、ブロックしますか?

ユーザjsonは、mongodbリクエストのためのスタンダードです。

'use strict';

const serverport = process.env.PORT; 

let users = [{ 
"id": 1, 
"name": "Leanne Graham", 
"username": "Bret", 
"email": "[email protected]", 
"address": { 
    "street": "Kulas Light", 
    "suite": "Apt. 556", 
    "city": "Gwenborough", 
    "zipcode": "92998-3874", 
    "geo": { 
     "lat": "-37.3159", 
     "lng": "81.1496" 
    } 
}, 
"phone": "1-770-736-8031 x56442", 
"website": "hildegard.org", 
"company": { 
    "name": "Romaguera-Crona", 
    "catchPhrase": "Multi-layered client-server neural-net", 
    "bs": "harness real-time e-markets" 
} 
}] 

let checkName = (obj) => { 
    let va = users[0].email; 
    return (va === obj) ? true : false; 
} 

let express = require("express"), 
app = express(); 

app.post('/reg', (req, res, next) => { 
    if (checkName(req.param.email) == true) { 
    //render email already taken  
    } else { 
    //render email is not taken and complete registration 
    } 
}); 

app.listen(serverport, (req, res, next) => { 
    console.log('server is listening on port: ' + serverport); 
}); 
+0

これが機能します。何があなたを捨てた?関数 'checkName'がコールバックなしでなかったという事実?もしそうなら、それは問題ではありません、あなたはどこにでもあなたの機能を持つことができます。また、私は良い習慣を提案するかもしれません:( 'checkName'と 'express'のような)変更されない変数に対しては 'let'の代わりに 'const'を使用してください。戻り値を次のように単純化することも検討してください。 'return va === obj' –

答えて

0

これは完全に大丈夫と思われる、 はかもしれないがOKでない例を見てみましょう:

const serverport = process.env.PORT; 

let users = mongoDb.getUsersAsync(); 

let checkName = (obj) => { 
    let va = users[0].email; 
    // this point does not wait for the async request to finish, 
    // therefore will not work ! 
    return (va === obj) ? true : false; 
} 

「ユーザー」変数がawaitableあるか約束が依存しているため、この1つは動作しません[OK]どんなライブラリyoureで使用しています。

どうすれば修正できますか?

awaitable - 今

const serverport = process.env.PORT; 

let users = await mongoDb.getUsersAsync(); 

let checkName = (obj) => { 
    let va = users[0].email; 
    // this point does not wait for the async request to finish, 
    // therefore will not work ! 
    return (va === obj) ? true : false; 
} 

のMongoDB非同期要求が完了するまで、 "ユーザー" 可変待機し、データをつかみます。

我々は違っそれを扱うその約束場合 -

const serverport = process.env.PORT; 

let usersPromise = mongoDb.getUsersAsync((users) => { 
    let checkName = (obj) => { 
     let va = users[0].email; 
     return (va === obj) ? true : false; 
    } 

    // ... the rest of youre code 
}); 

私は、いいえがあるので、あなたは上記のコードはうまく動作するはずですどのような方法をyoureの文脈における非同期状況に対処する方法をアップクリア願っています関連する非同期操作。

関連する問題