на стороне моего сервера (nodejs) у меня есть файл, который вызывает функцию (ldapjs) в другом файле, но возвращаемое значение не определено. Затем отображается истинное значение client.bind, но оно не возвращается в первый файл.
Результат test.js
Но мне нужно вернуть «ОК» из ldap.js -> return('ok)
test2.js
const f = require('./ldap3');
console.info(f.ldap_conn());
ldap3.js
var ldap = require('ldapjs');
var client = ldap.createClient({url: 'ldap://ldap-pr.tsl.bobo.com:389'});
const dn = 'uid=myname,ou=people, ou=teamMembers,ou=internal,o=bobo'
const password = 'mypassword'
function ldap_conn(){
client.bind(dn, password, function(error){
if (error){
console.info('fail')
return('not ok')
}
else{
console.info('not fail')
return('ok')
}
})
}
//ldap_conn()
//console.info(test)
module.exports = {ldap_conn};
Результат test.js неопределенный не провалиться
test2.js должен получить «ОК», но получает «Неопределенно». Но console.info('not error') после этого работает, и это значение не возвращается.
Короче говоря, client.bind работает нормально, но значение не возвращается.





ok и not ok — это возвращаемые значения не функции bind, а функции обратного вызова.
Один из подходов — заставить вызывающую сторону передать собственный обратный вызов:
// ldap3.js
var ldap = require('ldapjs');
var client = ldap.createClient({url: 'ldap://ldap-pr.tsl.bobo.com:389'});
const dn = 'uid=myname,ou=people, ou=teamMembers,ou=internal,o=bobo'
const password = 'mypassword'
function ldap_conn(callback) {
client.bind(dn, password, callback);
}
module.exports = {ldap_conn};
// test3.js
const f = require('./ldap3');
f.ldap_conn(function (error) {
if (error) {
console.info('not ok');
} else {
console.info('ok');
}
});
Этот вопрос похож на: Как мне вернуть ответ на асинхронный вызов?. Если вы считаете, что это другое, отредактируйте вопрос, поясните, чем он отличается и/или как ответы на этот вопрос не помогают решить вашу проблему.