草庐IT

javascript - 使用 q.js 链接 promise

我正在尝试了解promise链的工作原理。我正在使用q.js.这就是我正在玩的东西。varQ=require("q");//npminstallq//thefunctionQ(value)returnsafulfilledpromisewiththevalue...Ithink.Q(1).then(Q(2)).then(Q(3)).then(Q(4)).then(function(n){console.log(n);});Q(1).then(function(n){returnQ(2);}).then(function(n){returnQ(3);}).then(function(n)

javascript - 为什么我们更喜欢在 Angular 中使用 $q 而不是 $http

这个问题在这里已经有了答案:WhyareAngularJS$httpsuccess/errormethodsdeprecated?Removedfromv1.6?(2个答案)Isthisa"DeferredAntipattern"?(3个答案)关闭4年前。我目前正在使用Angular的$q服务来进行这样的API调用:vardeferred=$q.defer();$http.get(config.apiHost+details.url).success(function(data){deferred.resolve(data);}).error(function(msg){deferre

javascript - 使用递归 promise 阻止内存泄漏

如何使用Qlibrary创建JavaScriptPromise的递归链?以下代码无法在Chrome中完成://Don'tkeeptrackofapromisesstackfordebugging//ReducesmemoryusagewhenrecursingpromisesQ.longStackJumpLimit=0;functiondo_stuff(count){if(count==1000000){return;}if(count%10000==0){console.log(count);}returnQ.delay(1).then(function(){returndo_stu

javascript - 未处理的拒绝原因(应为空)

我正在使用Q进入promise模式,并且在控制台中不断收到警告“[Q]未处理的拒绝原因(应该为空)”。我做错了什么?http://jsfiddle.net/FpyDr/1/functionload(url){vardeferred=Q.defer();$.ajax({type:"GET",processData:false,dataType:"html",url:url,cache:false}).done(function(response,status,xhr){deferred.reject(newError("testerror"));return;}).fail(functi

Chrome 中的 JavaScript Promise/Defer

我使用的是支持Promise规范的Q库。但是我也尝试使用不久前(实验性)在Chrome中实现的Promise类。Q中有一个defer函数,可用于创建一个未实现的promise,该promise可以在未来解决或拒绝。我使用Chrome中提供的nativePromise实现了相同的功能。这是一个例子:vardefer=function(){varresult={};result.promise=newPromise(function(resolve,reject){result.resolve=function(value){resolve(value);};result.reject=f

javascript - 递归 promise ?

我想迭代HTML5文件系统中的所有文件,并在迭代完成后启动一些事件。由于这是异步+promise,我很难理解它应该如何工作。我正在使用angularJS并创建了一个服务来封装html5文件系统的特定功能。这是递归函数:functionwalkDirectory(path){fileSystem.getFolderContents(path)//thisistheservicesanditreturnsapromisecontainingallfilesinthecurrentfolderordirectory.then(function(entries){for(vari=0;i理想情

javascript - 我可以在 JavaScript Q 库中做出同步 promise 吗?

我想做如下的事情:delay(2500).then(function(){console.log("Step1done")}).then(delay(7500)).then(function(){console.log("Step2done")});所以delay的实现之前已经演示过很多次了:functiondelay(ms){vardeferred=Q.defer();setTimeout(deferred.resolve,ms);returndeferred.promise;}但是如果我在node.js中运行上面的代码,我会得到:...delayof2500msStep1doneS

javascript - q.js : difference between resolve() and fulfill()

我仍然不清楚调用解析器的resolve()与fulfill()之间的区别?我看到函数和术语“解决promise”和“履行promise”经常被争论不休。我应该什么时候使用它们? 最佳答案 你应该使用resolve。deferredPromise.resolve(nextPromise)意味着任何等待deferredPromise的东西现在都将等待nextPromise。如果nextPromise根本不是一个promise,它就会变成一个已实现的promise,继续通知等待它的任何东西该值已经可用。fulfill方法是一个坏主意,它将

javascript - 如何使用 Q.js 正确链接条件(?) promise

我还没有完全理解promise,如果这是一个简单的误解,我深表歉意。我有一个删除页面上的项目的功能,但我有一个特定的行为取决于页面的状态。伪代码是这样的:Doesthepagehavechanges?Ifyes-prompttosavechangesfirstIfyes-savechangesIfno-exitfunctionIfno-continuePrompttoconfirmdeleteIfyes-deleteitemandreloaddataIfno-exitfunction希望这是有道理的。本质上如果有变化,必须先保存数据。然后,如果数据已保存,或者如果开始时没有任何更改,则

javascript - 如何使用 "q"模块重构 mongoose 代码?

我正在使用mongoose将一些数据插入mongodb。代码如下:varmongoose=require('mongoose');mongoose.connect('mongo://localhost/test');varconn=mongoose.connection;//insertusersconn.collection('users').insert([{/*user1*/},{/*user2*/}],function(err,docs){varuser1=docs[0],user2=docs[1];//insertchannelsconn.collection('channe