在节点js es6中的异步函数中使用for循环时出现问题

时间:2018-08-31 10:47:58

标签: mysql node.js promise async-await

我已经编写了这段代码来检索联系人列表,并作为响应显示JSON,一切正常,但是代码未显示任何输出我应该怎么做?这是我的代码:

export const ContactListPost = (req, res) => {
        //const userHeader = req.get('userid');
        const contacts = req.body;
        console.log(contacts);
        let users = [];
        const delay = contact => new Promise(function (resolve, reject) {
            let sql = "select user.userid, user.fullname, user.phone, 

    photos.name as photo_link " +
                "from user left outer join photos on photos.uploader_id = user.userid where user.phone = ?";
            console.log("contact " + contact);
            con.query(sql, [contact], function (err, result) {
                if (err){
                    console.log(err);
                    reject(err);
                } else{
                    if (result.length > 0) {
                        users.push(result);
                        console.log(result);
                        resolve(result);
                    }else{
                        console.log("empty number");
                        //reject(result);
                    }
                }
            })
        });
        (async function loop() {
            for (let i = 0; i< contacts.length ; i++){
                let result = await delay(contacts[i].number);
                users.push(result);
                console.log("result " + JSON.stringify(result));
                console.log("i " + i);
            }
            console.log("users " + JSON.stringify(users));
            res.json(JSON.stringify(users));
        })();

    };

这段代码不显示

console.log(“用户” + JSON.stringify(用户));

res.json(JSON.stringify(users)); 谢谢你的建议

1 个答案:

答案 0 :(得分:0)

  

如果承诺被拒绝,则await表达式将抛出被拒绝的值。

您需要处理被拒绝的承诺。如果对delay的调用之一返回了拒绝的诺言,则会抛出该拒绝的值,并且该函数的执行将停止,并将控制权传递给调用堆栈中的第一个catch块。

await operator

throw statement