我有一个验证登录的功能:
BirdOO
它返回一个字符串,告诉我登录是否成功。
当我检查响应时,似乎它是一个对象,而不是字符串,这意味着我无法正确解析它(例如,检查响应是否是诸如var checkLogin = async (email, pass, captcha) => {
alert('Checking login')
return $.ajax("/users/ajax_login", {
data: {
email: email,
pass: pass,
captcha: captcha
},
}).done((response) => {
console.log('Done ', response)
}).fail(error => {
console.log('Error ', error)
})
.always(response => {
console.log('always ', response)
}).then(msg => {
console.log('login response: ' + msg);
return msg;
})
}
之类的字符串)。
所以这段代码:
good
将var loginResponse = checkLogin(email, pass, captcha );
loginResponse = loginResponse.toString();
console.log('first 4 chars: ' + loginResponse.substring(0,4));
写入控制台。
如何将响应正确转换为可以解析的字符串?
谢谢
答案 0 :(得分:0)
当我检查响应时,似乎它是一个对象而不是字符串,这意味着我无法正确解析它
正确的async
函数始终返回Promise对象,这些对象用于观察异步操作的结果。
要使用字符串,您需要使用promise。有两种方法:
使用其then
和catch
方法:
checkLogin(/*...*/)
.then(result => {
// Use `result` here, presumably it's a string if `checkLogin`'s docs say it will be
})
.catch(error => {
// Handle or report `error` here, something went wrong in `checkLogin`'s asynchronous processing
});
如果您将诺言返回给调用函数(应该处理错误),则可以不使用catch
。
使用await
(在async
函数内部):
try {
const result = await checkLogin(/*...*/);
// Use `result` here, presumably it's a string if `checkLogin`'s docs say it will be
} catch (e {
// Handle or report `error` here, something went wrong in `checkLogin`'s asynchronous processing
}
如果要将处理错误留给调用函数,可以不使用catch
。