Javascript 从TypeScript中的回调返回值
我在file Service.ts的typescrypt中有一个函数:Javascript 从TypeScript中的回调返回值,javascript,node.js,typescript,callback,Javascript,Node.js,Typescript,Callback,我在file Service.ts的typescrypt中有一个函数: export const doCallAuth = (username, password) => { var auth = new Auth({ url: '...', }); var status; auth.authenticate(username, password, function (err, user) { if (err
export const doCallAuth = (username, password) => {
var auth = new Auth({
url: '...',
});
var status;
auth.authenticate(username, password, function (err, user) {
if (err) {
console.log(err);
status = 'no';
} else if (!user.uid) {
console.log("user not found Error");
status = 'no';
} else if (user.uid) {
console.log("success : user " + user.uid + " found ");
status = 'yes';
}
});
return status;
}
我通过以下方式调用此方法:
var result = Service.doCallAuth('test', 'test');
var result = await Service.doCallAuth('test', 'test');
且变量结果未定义
我不知道为什么结果没有定义
有人能帮我吗
提前感谢。:) 试试这个
export const doCallAuth = (username, password, callback) => {
var auth = new Auth({
url: '...',
});
var status;
auth.authenticate(username, password, callback);
}
var result;
Service.doCallAuth('test', 'test', function (err, user) {
if (err) {
console.log(err);
status = 'no';
} else if (!user.uid) {
console.log("user not found Error");
status = 'no';
} else if (user.uid) {
console.log("success : user " + user.uid + " found ");
status = 'yes';
}
result = status;
});
要从AJAX调用中获取值,需要使用
async
和wait
export const doCallAuth = async function(username, password) => {
var auth = new Auth({
url: '...',
});
var status;
auth.authenticate(username, password, function (err, user) {
if (err) {
console.log(err);
status = 'no';
} else if (!user.uid) {
console.log("user not found Error");
status = 'no';
} else if (user.uid) {
console.log("success : user " + user.uid + " found ");
status = 'yes';
}
return status;
});
}
通过以下方式调用此方法:
var result = Service.doCallAuth('test', 'test');
var result = await Service.doCallAuth('test', 'test');
您可以使用承诺或回调模式 1。承诺
export const doCallAuth = (username, password) => {
return new Promise((resolve, reject) => {
var auth = new Auth({ url: "..." });
auth.authenticate(username, password, (err, user) => {
if (err) {
reject(err);
} else if (!user.uid) {
reject(new Error("user not found Error"));
} else if (user.uid) {
console.log("success : user " + user.uid + " found ");
resolve(user);
}
});
});
};
Service.doCallAuth("test", "test")
.then(user => {
console.log("success : user " + user.uid + " found ");
})
.catch(e => {
console.log(e);
});
2。回调
export const doCallAuthCallBack = (username, password, callback) => {
var auth = new Auth({ url: "..." });
auth.authenticate(username, password, (err, user) => {
if (err) {
callback(err);
} else if (!user.uid) {
callback(new Error("user not found Error"));
} else if (user.uid) {
callback(null, user);
}
});
};
Service.doCallAuthCallBack("test", "test", (err, user) => {
if (err) {
console.log(err);
} else {
console.log("success : user " + user.uid + " found ");
}
});
由于身份验证是一个异步函数,并且在调用该异步函数后立即返回状态,因此您正在得到未定义的结果。@Sohail:那么我该如何修复?它不起作用,结果未定义。我已编辑了我的答案,请试着这样做。当您调用Service.doCallAuth时,请传递回调函数。希望这能解决问题。它仍然不工作,状态未定义:)@JavaDevBeginner我已经更新了我的代码。请查收。如果有任何问题,请让我知道。仍然不工作:)工作正常。您可以通过异步/等待进行书写吗?:)只需将函数调用更改为
const result=await Service.doCallAuth(“test”、“test”)
,承诺处理异步/等待模式,并通过try/catch模式包装等待调用以捕获错误。