承诺返回错误的值

时间:2018-07-01 14:01:41

标签: javascript asynchronous scope es6-promise synchronous

在我的代码中,我尝试为json变量分配一个值以在之后返回它(因为我无法从匿名函数中返回它)。

由于我的函数是异步的,因为它发送请求(也许有人知道如何使其同步?我不打算使其异步),所以我在请求之前添加了await({{1 }}。

我一直在尝试从Promise中获得价值,尽管我一直在等待异步功能,但它始终是https.get

这是一个代码:

undefined

2 个答案:

答案 0 :(得分:1)

在调用Promise事件时返回resolveend,否则,在发生错误的情况下返回reject

async function get_users() {
  const https = require('https');
  const token = '...';

  return new Promise((resolve, reject) => {
    https.get('...', resp => {
      let data = '';

      resp.on('data', chunk => {
        data += chunk;
      });

      resp.on('end', () => {
        let json;

        try {
          json = JSON.parse(data)['response']['items'];          
        } catch (e) {
          reject(e);
        };
        resolve(json);
      });
    }).on("error", err => reject(err));
  });
}

get_users().then(result => console.log(result));

答案 1 :(得分:0)

请参考下面的代码。我也无法从Promises处获得响应。但是我终于使它起作用了。这是代码:

var output;
var rp = require('request-promise-native');
var myJSONObject = {
  "inputs": [{
    "name": "<name>",
    "value": < value >
  }]
};
var orchName = 'TEST05';
postData = JSON.stringify(myJSONObject);
return networkCall(postData, orchName).then((response) => {
  console.log('response is' + response)

}).catch((response) => {
  console.log(`ERROR: ` + response);
});

function networkCall(postData, orchName) {
  return new Promise((resolve, reject) => {
    var options = {
      method: 'post',
      uri: '<URL>',
      body: postData,
      auth: {
        'user': 'usr',
        'pass': 'pwd'
      },
      json: true
    };
    return rp(options)
      .then(body => {
        var response = body;
        resolve(response);
      })
      .catch(err => {
        console.log('FAILED' + err);
        reject(err);
      });
  });
}

这样,您的代码就可以在同步流中运行。如果返回值为undefined,则可能发生的情况是,即使在被调用函数返回其响应之前,调用函数也将完成执行。以上方法就可以了。