使用 Promise 和async await来执行循环加异步操作,外部取值

node里根据传过来的一串数字,循环读取JSON文件,拼接读取结果,并返回值

// 获取购物车列表
app.get('/getshopcarlist/', function (req, res) {
    //这里传过来一串  ,分隔的数字 穿过来的值为类似   23,27,98  数字用,隔开
    var id = req.query.ID
    var idlist = id.split(",")
    var pagePersonmessage = []

    function getFileBylist(path) {
        return new Promise(function (resolve, reject) {//这里用的Promise构造函数,创造一个异步实例
            fs.readFile(path, function (err, data) {
                if (err) {
                    return reject(err)  //错误结果
                } else {
                    console.log(path + "----path")  //判断是否路径传入正确
                    var person = data.toString();
                    person = JSON.parse(person);
                    var pagePerson = person.message[0]  //取值
                    // console.log(pagePersonmessage)
                    resolve(pagePerson)  //返回每个读取的文件
                }
            })
        })
    }
    
    // 由于readFile是异步操作,我使用了async
    var readlist = async function () {
        var arr = [];
        for (let i in idlist) { //循环每个地址,使用let变量  不过由于使用了async,这里let和var无区别
            var path = "./shopcarlist/shopcarlist" + idlist[i] + ".json"  //拼接
            arr = await getFileBylist(path)                             //这里的await就是会执行到这里会等待执行完毕再进行下面的代码
            pagePersonmessage = pagePersonmessage.concat(arr)              //拼接为一个数组
        }
        // console.log(pagePersonmessage)
        res.header("Access-Control-Allow-Origin", "*");   //这里是跨域头部代码
        res.header("Access-Control-Allow-Headers", "X-Requested-With,Origin,Content-Type,Accept");
        res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");

        // console.log(pagePersonmessage);
        var pagePersonList = { "status": 0, "message": pagePersonmessage }  //拼接,发送
        res.send(pagePersonList);
        res.end();
    }


    readlist()

});






app.listen(3000, function () {   //监听3000端口
    console.log("Server running at 3000 port");
});
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值