美文网首页
JS中使用await和不使用await的简单示例

JS中使用await和不使用await的简单示例

作者: lenbolan | 来源:发表于2020-12-21 12:06 被阅读0次
    const express = require("express");
    const fetch = require("node-fetch");
    const bodyParser = require('body-parser');
    const multer = require('multer');
    const upload = multer();
    const redis = require("redis");
    // const io = require("socket.io")(3000);
    const crypto = require('crypto');
    
    const PORT = process.env.PORT || 5000;
    const REDIS_PORT = process.env.PORT || 6379;
    
    const client = redis.createClient(REDIS_PORT);
    
    // io.on("connection", socket => {
    //     socket.emit("chat-message", "Hello World");
    // });
    
    const app = express();
    
    app.use(bodyParser.json());
    app.use(bodyParser.urlencoded({ extended: true }));
    
    
    function creatRes(code) {
        let stat = code > 1000 ? "FAILED" : "SUCCESS";
        let message = {
            0 : "ACTION SUCCESS",
            1001 : "user exists!",
            1002 : "hgetall error!", 
            1003 : "incr userid error!",
            1004 : "hmset user error!",
        }
        return { status: stat, errno: code, message: message[code] };
    }
    
    
    app.post("/user/register", upload.array(), async (req, res) => {
        // console.log("username: ", req.body.username);
        // console.log(req.body);
        let { username, password, email } = req.body;
        let md5 = crypto.createHash("md5");
        let hashPwd = md5.update(password).digest("hex");
        // console.log(hashPwd);
    
        let userKey = `chatapp:user:${email}`;
        
    // ==================  Promise [ begin ]  ==================
        let searchFunc = (resolve, reject) => {
            client.hgetall(userKey, (err, data) => {
                if (err) {
                    console.log(err);
                    reject( creatRes(1002) );
                }
                if (data !== null) {
                    console.log("user exists!");
                    reject( creatRes(1001) );
                } else {
                    resolve();
                }
            })
        }; 
    
        let incrFunc = (resolve, reject) => {
            let incrKey = "chatapp:userid";
            client.incr(incrKey, function(err, latestUserId) {
                if (err) {
                    console.log(err);
                    reject( creatRes(1003) );
                }
                console.log("latest userid:", latestUserId);
                resolve(latestUserId)
            })
        }
    
        let hmsetFunc = (latestUserId) => {
            return new Promise((resolve, reject) => {
                let val = {
                    username: username,
                    password: hashPwd,
                    userid: latestUserId
                }
                client.hmset(userKey, val, function(err, res) {
                    if (err) {
                        console.log(err);
                        reject( creatRes(1004) );
                    }
                    console.log("hmset res:", res);
                    resolve( creatRes(0) );
                })
            })
        }
    
        let useAsyncAwait = 1
        if (useAsyncAwait) {  // 使用 async await, 明显阅读起来比较舒服
            console.log("use async & await.");
            try {
                await new Promise(searchFunc);
                let latestUserId = await new Promise(incrFunc); 
                let result = await hmsetFunc(latestUserId);
                console.log(result);
                res.json( result );
            } catch (err) {
                console.log(err);
                res.json( err );
            }
        } else { // 不使用 async await, 阅读起来比嵌套好,但比 async await 差点意思
            console.log("only Promise.");
            new Promise(searchFunc)
            .then(() => {
                return new Promise(incrFunc)
            })
            .then((latestUserId) => {
                return hmsetFunc(latestUserId)
            })
            .then((result) => {
                console.log(result);
                res.json( result );
            }).catch( err => {
                console.log(err);
                res.json( err );
            })
        }
    // ==================  Promise [ end ]  ==================
    });
    
    
    
    app.listen(5000, () => {
        console.log(`App listening on port ${PORT}`);
    });
    

    相关文章

      网友评论

          本文标题:JS中使用await和不使用await的简单示例

          本文链接:https://www.haomeiwen.com/subject/hjdrnktx.html