【问题标题】:problem while using for loop in async function in node js es6在节点js es6的异步函数中使用for循环时出现问题
【发布时间】:2019-02-06 09:21:15
【问题描述】:

我编写了这段代码来检索联系人列表并作为响应显示 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(users));

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

【问题讨论】:

  • 旁注:始终兑现您的承诺,即履行或拒绝。您的一条路径无法解决承诺。
  • 旁注:如果您已经使用该值解析承诺,为什么要将结果推送到用户数组 users.push(result);?

标签: mysql node.js promise async-await


【解决方案1】:

如果 promise 被拒绝,则 await 表达式会抛出被拒绝的值。

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

await operator

throw statement

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-27
    • 1970-01-01
    相关资源
    最近更新 更多