如何使用Zapier的StoreClient设置和检索单个值?

时间:2017-05-24 20:17:42

标签: javascript promise zapier

在文档之后,我在我的JS中使用它:

var store = StoreClient('my secret');
store.set('active', true);
var status = store.get('active');

变量status永远不会有值。我显然没有正确使用该库。

对于上下文,这是在switch语句中,对于许多情况都是这样的,其中一些需要设置或从StoreClient获取值。

The documentation使用此示例:

var store = StoreClient('your secret here');
store
  .set('hello', 'world')
  .then(function() {
    return store.get('hello');
  })
  .then(function(value) {
    // value === 'world'
    return store.delete('hello');
  })
  .then(function() {
    callback();
  })
  .catch(callback);

因为我在业余方面,我对承诺并不十分熟悉。在那个例子中,我不清楚为了[a]设置需要哪些部分,最终[b]得到一个值。我建议将一个没有set / get / delete的例子合并为一个。

我试过了:

var store = StoreClient('my secret');
store
  .set('active', true)
  .then(function() {
    return store.get('active');
  })
  .then(function() {
    callback();
  })
  .catch(callback);

...但是我得到一个错误,即没有output变量,即使我没有触及脚本底部的output变量。

1 个答案:

答案 0 :(得分:0)

来自Zapier平台团队的David来自这里。

对于文档中的混淆感到抱歉。我会给你一个关于如何修复你的代码的快速答案,以及一个很长的问题。与此同时,我会做一个注释,用更加敏感的例子来更新文档。

两件大事:

一个。 Promise选择最后一个函数返回的内容。如果你不带它们,它们会丢失。您的代码应为:

.then(function(storedVal) { // <- that variable is missing in your code
  console.log('stored val is', storedVal);
})

B中。您需要为callback的第二个参数提供值。有一个更好的例子here

.then(function(storedVal) {
  callback(null, {active: storedVal});
})

以下是关于如何使所有Zapier代码都运行良好的一些细节。

回调

您的代码在AWS Lambda中运行,它始终需要知道您何时完成。它在具有一组参数的特殊函数中执行所有代码。这里的相关内容是callback,当您准备退出(或出错)时,您可以调用该函数。您可以阅读有关该设置的更多信息here

与大多数节点回调一样,callback具有函数签名callback (error, result)。要抛出错误,你会在第一个位置传递一些东西:

callback({msg: 'thing went wrong'});

要传递结果,请使用第二个(在第一个中没有任何内容)

callback(null, {myData: 4});

所以,没有传递任何东西是为什么zap结果没有看到任何数据。

承诺

一般来说,回调很糟糕并且让人感到困惑,所以我们设计了StoreClient来返回承诺。关于在线承诺有很多材料,所以我不会在这里详细介绍。重要的是,从promise函数返回的任何东西都是下一个函数的参数。例如:

Promise.resolve(1)
  .then(function(val) {
    // val === 1
    return Promise.resolve(val + 1)
  })
  .then(function(val) {
    // val === 2
  })

these docs中有一个更实际的例子:

var store = StoreClient('your secret here');
var outCount;
store
  .get('some counter')
  .then(function(count) {
    count = (count || 0) + 1;
    outCount = count;
    return store.set('some counter', count);
  })
  .then(function() {
    callback(null, {'the count': outCount});
  })
  .catch(callback);

希望能稍微清理一下!

另外,如果你想试试Python,你可以做同样的代码,但更简单(example here)。

无论哪种方式,请告诉我们我们还能做些什么来帮助您!