在IF语句中获取会产生输出错误

时间:2017-10-17 16:13:09

标签: node.js fetch-api zapier

我正在与Asana和Zapier合作,我正在努力在一个项目中获取一个部分,如果它不存在,可以选择创建一个部分。这个动作在Zapier中并不存在。

我使用Zapier Code执行GET,并且该代码成功地将sectionId返回为0或Asana的实际id。

在下一个操作中,我再次执行Zapier Code,并且我尝试执行POST来创建Section,但前提是GET操作返回的sectionId为0。

我认为我遇到的问题与缺乏对异步编程的理解有关。但是,我或多或少地将代码从成功的GET操作复制到新操作中,并将HTTP请求更改为POST。

如果删除if语句,则POST按预期工作。

我遇到的问题是将fetch包装在if语句中。我试图简单地将它包装在if语句中(如果为0,则执行获取,否则返回不是0的ID),并将其创建为我放在if语句中的函数。我已经尝试了每种方法的一些不同配置,但不管怎样,我收到的错误是:

  

Bargle。我们在创建运行javascript时遇到错误。 :-(错误:   ReferenceError:未定义输出

这是我的代码:

var sId = input.sId;

function doFetch(aPId) {
  var settings = {
    'method': 'POST',
    'headers': {
      'Authorization': 'Bearer <ACCESS TOKEN>',
      'Content-Type': 'application/x-www-form-urlencoded'
    },
    'body': "name=Emails%3A"
  };

  var url = 'https://app.asana.com/api/1.0/projects/' + aPId + '/sections';

fetch(url,settings)
  .then(function(res) {
    return res.json();
  })
  .then(function(json) {
    callback(null, json);
  })
  .catch(callback);
}

if(sId === 0){
  return doFetch(input.asanaProjectId);
}

output = [{test: 123}];

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

好的,我修好了。我无法完全解释,但这很有效。我相信if语句本身就是问题。

var sId = inputData.sId;

function createSection(aPId) {
  var settings = {
    'method': 'POST',
    'headers': {
      'Authorization': 'Bearer <ACCESS TOKEN>',
      'Content-Type': 'application/x-www-form-urlencoded'
    },
    'body': "name=Emails%3A"
  };

  var url = 'https://app.asana.com/api/1.0/projects/' + aPId + '/sections';
  console.log('Settings:',settings);
  console.log('URL:',url);


  fetch(url,settings)
    .then(function(res) {
      var response = res;
      //console.log(response);
      return response.json();
    })
    .then(function(json) {
      //console.log(json);
      var sId = json['data']['id'];
      callback(null,{sectionId: sId});
    })
    .catch(callback);

}

if(sId == 0){
  var sId = createSection(input.asanaProjectId);
  console.log('If test ran!');
} else {
  output = [{sectionId: sId}]; 
}