美文网首页
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