worklight 5.0.6 JsonRestStore,使用Promises

这最初是一个关于Worklight文档的问题,我发现我真正的问题是关于JQuery的Deferred / Promise API和promise.then()函数。

语境:

5.0.6 JsonRestStore API的文档提供了使用新Promisefunction的示例,它提供了两种可能的配方。

someFunction.then( successCallback, errorCallback, optionalProgressCallback); 

  someFunction().then(successCallback).fail(errorCallback) 

正如评论和答案所述,这两种方法看起来实际上是相同的。

我的难点是JQuery文档声明then()返回一个“新的承诺”。

因此,在第二种情况下,我们编码:

  var p1 = someFunction(); var p2 = p1.then(successCallback); p2.fail(errorCallback); 

我也看到人们建立了这样的行动“链”:

  someFunction().then(action2).then(action3).then(action4); 

建立一系列异步操作。 所以我的问题变成了上面例子中承诺p1和p2之间的关系。 这与连锁理念有何关系?

—编辑参考答案—

感谢cnandreu:关键是“错误沿着promise链传播,直到找到error handling程序。” 答案在这里很好地解释了 。

 var p1 = someFunction(); var p2 = p1.then(successCallback); p2.fail(errorCallback); 

所以我的问题变成了上面例子中承诺p1和p2之间的关系。 这与连锁理念有何关系?

Promise是一种处理异步代码的方法,这是一个快速video和解释它们的文章 。 someFunction()将执行异步任务,当它完成它(即得到解决 )时,它执行successCallback ,如果失败(即被拒绝 ),它将执行errorCallback 。 关系是p2是一个只有在p1被拒绝时才会执行的承诺。 想想p1.then(win, fail)p1.then(win).fail(fail)作为写同一件事的两种方式。

最初的问题可能是指以下内容:

在调用JSONStore异步操作(查找,添加,删除等)后返回promise对象。 […] [JSONStore.add,JSONStore.find等]失败回调,作为.then的第二个参数或.fail的第一个参数传递,返回错误对象,[…]

来自JSONStore文档 。 该文档特定于JSONStore API,我们将读者引用到jQuery文档以了解promises如何工作( 有关更多详细信息,请参阅jQuery的API文档 )。

这是一个例子:

 var collections = { people : { searchFields : {name: 'THIS_SHOULD_PRODUCE_AN_ERROR'} } }; WL.JSONStore.init(collections) .then(function(res){ //the code here should not be called because we expect to fail console.log(typeof res === 'object' ? JSON.stringify(res) : res); }) .fail(function(err){ console.log(err.toString()); }); 

输出是:

 {"src":"initCollection","err":-12,"msg":"INVALID_SEARCH_FIELD_TYPES","col":"people","usr":"jsonstore","doc":{},"res":{}} 

如果我们切换到.then(success, failure)

 var collections = { people : { searchFields : {name: 'THIS_SHOULD_PRODUCE_AN_ERROR'} } }; var success = function(res){ //the code here should not be called because we expect to fail console.log(typeof res === 'object' ? JSON.stringify(res) : res); }; var failure = function(err){ console.log(err.toString()); }; WL.JSONStore.init(collections).then(success, failure); 

我们得到相同的输出:

 {"src":"initCollection","err":-12,"msg":"INVALID_SEARCH_FIELD_TYPES","col":"people","usr":"jsonstore","doc":{},"res":{}} 

混合它们,选择一个或使用已弃用的回调。 文档中的所有JSONStore示例都应按预期工作。 请通过文档中的真实引用更新您的问题,并提供一个显示文档错误的真实示例,我将更新我的答案。 如果事实certificate问题,我会尽一切可能来解决它​​。

它们在function上是一样的,这基本上是链接的工作方式吗? 您有两个选择,要么获取一个调用的输出,又将其链接到下一个调用,或者您可以将结果保存在命名变量中,然后在该命名变量上调用下一个操作。

 var str = " fooo "; str.trim().indexOf('f'); 

 var str = " fooo "; var strTrimmed = str.trim() strTrimmed.indexOf('f');