微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从另一个 Promise 调用 Promise 方法

如何解决从另一个 Promise 调用 Promise 方法

希望你们每个人都做得很好。我陷入了一个小问题。任何帮助将不胜感激。

我正在使用 ldapJS 并且我想从 LDAPJS 的 searchEntry 方法调用一个承诺。当我编写与下面相同的代码时。它抛出一个错误

exports.getADUsers = async (reqst,resp,next) => {
    let flag = false;
    var finalList = [];
    let adConnStatus = await ConnectAD()
        .then().catch((errConnStatus) => {
            console.log("Error in connection with Active directory " + errConnStatus);
        });

    if (adConnStatus.status == 0) {
        let client = adConnStatus.client;
        const opts = {
            filter: '(ObjectClass=*)',scope: 'sub',attributes: ['cn','sid',"objectSid"]
        };
        client.search('dc=domain,dc=com',opts,(err,res) => {
            if (err) {
                console.log("Error: " + err);
            } else {
                res.on('searchEntry',(entry) => {
                    finalList = await searchEntry(entry);
                });
                res.on('searchReference',(referral) => {
                    console.log('referral: ' + referral.uris.join());
                });
                res.on('error',(err) => {
                    console.error('error: ' + err.message);
                });
                res.on('end',(result) => {
                    resp.send(finalList);
                    console.log(result);
                });
            }
        });
    }
}

错误

finalList = await searchEntry(entry);
            ^^^^^

SyntaxError: await is only valid in async function

请帮忙!如何从一个承诺中调用一个承诺。尽管该方法是异步的,为什么它会显示此消息?我做错了什么?

编辑

按照async的建议添加关键字@Punth后。还修改了一些代码。我的新代码如下。

exports.getADUsers = async (reqst,next) => {
    let adConnStatus = await ConnectAD()
        .then().catch((errConnStatus) => {
            console.log("Error in connection with Active directory " + errConnStatus);
        });

    if (adConnStatus.status == 0) {
        var adUsersList = [];
        let client = adConnStatus.client;
        const opts = {
            filter: '(ObjectClass=*)',async (entry) => {
                    var raw = entry.raw;
                    if (raw.objectSid != "undefined" && raw.objectSid != null && entry.object.cn != null && entry.object.cn != "undefined") {
                        let userData = {
                            "Name": entry.object.cn,"SSID": sidBufferToString(raw.objectSid)
                        }
                        var lmn = await ConnectAndGetUsersList(userData.SSID);
                        userData["XYZ"] = lmn.xyz;
                        userData["ABC"] = lmn.abc;
                        adUsersList.push(userData);
                    }
                });
                res.on('searchReference',(result) => {
                    console.log(result);
                    resp.send(adUsersList);
                });
            }
        });
    }
}

通过运行上面的代码,它没有显示任何内容res.on('end' ....)res.on("searchEntry"....) 之前被调用,因此 adUsersList 的数组为空。

现在我的问题是如何resp.send最终的数组列表???

解决方法

按如下方式更新此行,要在回调中使用 async/await 语法调用 Promise,您需要使其异步

 res.on('searchEntry',async (entry) => {
   finalList = await searchEntry(entry);
 });

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?