如何从嵌套函数返回响应?

时间:2019-12-07 14:40:05

标签: javascript node.js request

  exports.addAccount = async function(username, password){
        var request = require('request');
        var data = '{"login": "' + username + '","password":"' + password + '" }';
        var json_obj = JSON.parse(data);
        error = request.post({
            headers: {'content-type': 'application/json'},
            url: 'https://example.su/engine/auth.php',
            form: json_obj
        }, async function* (error, response, body){
            try {
              response = JSON.parse(body);
              if(response.error){
                  return 'error' + response.error;
              }else{
                try {
                    if(response.id){
                      const ret = ConfigManager.addAuthAccount(response.id, response.hash,  
                      response.email, response.username)
                      if(ConfigManager.getClientToken() == null){
                          ConfigManager.setClientToken(response.hash);
                      }
                      ConfigManager.save();
                      return ret;
                    }
                  } catch (e) {
                      return "error";
                  }
              }
            } catch (e) {
                 return "error";
            }
        });
        if(error.includes('error')){
                //*****************
        }
    }

如何重定向嵌套函数的返回值? 或如何将响应主体写入变量“错误”? 如何实现呢?重做程序中的授权机制?

1 个答案:

答案 0 :(得分:1)

首先,除非您在函数内部使用了await,否则不需要使用异步。其次,要解决此问题,您需要返回一个承诺并相应地解决(返回结果值)或撤销(返回错误)。

create table t1 (
  f_sta_date number, 
  f_sta_time number,
  f_sto_date number,
  f_sto_time number
);
insert into t1 values (20191001, 6689, 20191001, 7185);
commit;

with
  prep (f_sta_date, f_sta_time, f_sto_date, f_sto_time, dt_sta, dt_sto) as (
    select f_sta_date, f_sta_time, f_sto_date, f_sto_time,
           from_tz(to_timestamp(to_char(f_sta_date), 'yyyymmdd') 
                   + numtodsinterval(f_sta_time, 'second'), 'CET'),
           from_tz(to_timestamp(to_char(f_sto_date), 'yyyymmdd')
                   + numtodsinterval(f_sto_time, 'second'), 'CET')
    from   t1       
  )
select f_sta_date, f_sta_time, f_sto_date, f_sto_time, dt_sta, dt_sto,
       dt_sta at time zone 'UTC' as dt_sta_utc,
       dt_sto at time zone 'UTC' as dt_sto_utc
from   prep
;

F_STA_DATE F_STA_TIME F_STO_DATE F_STO_TIME DT_STA                  DT_STO                  DT_STA_UTC              DT_STO_UTC             
---------- ---------- ---------- ---------- ----------------------- ----------------------- ----------------------- -----------------------
  20191001       6689   20191001       7185 2019-10-01 01:51:29 CET 2019-10-01 01:59:45 CET 2019-09-30 23:51:29 UTC 2019-09-30 23:59:45 UTC

您可以找到有关承诺here的更多信息。