在文档之后,我在我的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
变量。
答案 0 :(得分:0)
对于文档中的混淆感到抱歉。我会给你一个关于如何修复你的代码的快速答案,以及一个很长的问题。与此同时,我会做一个注释,用更加敏感的例子来更新文档。
两件大事:
一个。 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)。
无论哪种方式,请告诉我们我们还能做些什么来帮助您!