jjzjj

javascript promise 递归

我有一个异步递归函数,如果还有更多工作要做,它会返回promise,否则返回结果数组。如果不涉及递归,它会正确返回数组,但是当存在递归时,数组是未定义的。代码是functionfoo(filepath){varresultArr=[];functiondoo(file){returnasyncOperation(file).then(resp=>{resultArr.push(resp.data);if(resp.pages){varpages=resp.pages.split(',');pages.forEach(page=>{returndoo(page);});}else{ret

javascript - resolve(thenable) 和 resolve ('non-thenable-object' ) 之间有什么区别?

我试图理解resolve(thenable)和resolve('non-thenable-object')之间的区别。在下面的示例中,使用promise而不是thenable,因为promise也是thenable并且可能更容易理解。Demo1:resolve(promise)letresolvePromise=newPromise(resolve=>{letresolvedPromise=Promise.resolve()resolve(resolvedPromise)})resolvePromise.then(()=>{console.log('resolvePromisereso

javascript - div 完成动画后的事件?

如何让函数在某个元素完成动画后运行?这是一个像动画一样的向下滑动,元素是隐藏的,当点击某些东西时,它会通过向下滑动它的内容(+高度)而变得可见。我无法控制那个元素的动画函数,所以我不能使用$.animate函数的回调选项...现在我有类似的东西$('.trigger').click(function(){//哪个有用,但我不喜欢,感觉很老套 最佳答案 如果您使用的是jQuery1.5+,则可以使用jQuerypromise()方法:http://jsfiddle.net/rGBk7/例如/*doanimation*/$("div")

javascript - 使用 Promises 处理分支

我有一个关于jQuery1.9.1promises的问题,我可能需要条件逻辑来返回另一个deferred而我不确定如何处理它。这是我最好的尝试,但正如下面的评论所示,当我点击else分支时,我仍然点击了第二个.then()函数,我希望我可以在那里返回给用户。如何处理这种情况的任何模式?storage.provision(c).then(function(rc){if(rc===0){storage.write(c);}else{returnoptions.onSuccess(rc);//howigotbacktotheuserscallbacks/promise,butthis//ta

javascript - 排队 promise

我使用mbostock/queue用于排队一些异步操作。更多的是速率限制(UI生成的事件很少,后端可以慢慢处理),并确保它们按顺序处理。我像这样使用它functionrequest(d,cb){//someasyncoperadd.then(function(){cb(null,"finished")})}varaddQ=queue(1);addQ.defer(request)//calledbyfewreqathigherratesgeneratedbyUI我已经使用angular.js$q进行异步操作。那么,我是必须使用mbostock/queue,还是可以用$q构建一个队列(本质

javascript - Bluebird.js 自定义错误捕获功能,不适用于第一个 promise ?

我正在尝试使用Bluebird.js的自定义错误处理程序。在下面的示例中调用了包罗万象的处理程序,而不是MyCustomError处理程序,但是当我将拒绝移动到then函数(并解决了firstPromise...)时,MyCustomError处理程序叫做。这是为什么?有什么问题吗?谢谢。varPromise=require('bluebird'),debug=require('debug')('main');firstPromise().then(function(value){debug(value);}).catch(MyCustomError,function(err){deb

javascript - 陷阱 when.js 未处理的拒绝

我想捕获when.js未处理的拒绝,以便我可以记录它们。为此,我覆盖了console.warn(),但是它可以记录我不感兴趣的when.js以外的内容。引用:https://github.com/cujojs/when/blob/master/docs/api.md#debugging-promises我在when.js中使用prettymonitorhttps://github.com/AriaMinaei/pretty-monitor 最佳答案 如果您在服务器端,您可以使用promise拒绝钩子(Hook)。这些将适用于服务器端

javascript - 使用 Chai 解决 Protractor 和 Cucumber 中的 promise

最近,我和一位同事对使用Protractor和Chai实现Cucumber步骤定义的“正确”方式存在一些分歧。我们的争论源于对Cucumber上下文中promise解决方案的确切情况的相互缺乏理解。我们正在针对AngularJS应用程序进行测试,因此解决promise和异步行为是不可避免的。我们遇到的最大问题是强制执行同步测试行为并让Cucumber在步骤定义之间等待promise。在某些情况下,我们观察到这样的情况,即Cucumber似乎在Webdriver执行步骤定义之前就直接完成了步骤定义。我们对这个问题的解决方案各不相同......考虑假设场景:Scenario:Whenaus

javascript - 循环 promise

我处于这样一个场景中,我必须按顺序从服务器获取数据,我想在Promises的帮助下做到这一点。到目前为止,这是我尝试过的:functiongetDataFromServer(){returnnewPromise(function(resolve,reject){varresult=[];(functionfetchData(nextPageToken){server.getData(nextPageToken).then(function(response){result.push(response.data);if(response.nextPageToken){fetchData(

javascript - AngularJS:如何在配置阶段使用 $q 进行单元测试?

我有一个Angular服务负责加载config.json文件。我想在我的运行阶段调用它,所以我在我的$rootContext中设置了那个json,因此,它在未来对每个人都可用。基本上,这就是我所拥有的:angular.module('app.core',[]).run(function(CoreRun){CoreRun.run();});我的CoreRun服务在哪里:angular.module('app.core').factory('CoreRun',CoreRun);CoreRun.$inject=['$rootScope','config'];functionCoreRun($