首页 > 解决方案 > 将函数文本返回到字符串

问题描述

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

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));

将写入[obj控制台。

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

谢谢

标签: jquery

解决方案


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

没错,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如果您想将处理错误留给调用函数,您可以省略。


推荐阅读