将函数文本转换为字符串

时间:2019-06-10 12:45:32

标签: jquery

我有一个验证登录的功能:

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)); 写入控制台。

如何将响应正确转换为可以解析的字符串?

谢谢

1 个答案:

答案 0 :(得分:0)

  

当我检查响应时,似乎它是一个对象而不是字符串,这意味着我无法正确解析它

正确的async函数始终返回Promise对象,这些对象用于观察异步操作的结果。

要使用字符串,您需要使用promise。有两种方法:

  1. 使用其thencatch方法:

    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

  2. 使用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