Tag: q

承诺后返回值

我有一个JavaScript函数,我想返回返回方法后得到的值。 比解释更容易看 function getValue(file){ var val; lookupValue(file).then(function(res){ val = res.val; } return val; } 用诺言来做这件事的最好方法是什么? 据我了解, return val将返回之前lookupValue已经完成了,但我不能return res.val ,因为它只是从内部函数返回。

如何利用Qt使QObject方法线程安全?

假设我们在一个QObject派生类中写了一个非const方法: class MyClass : public QObject { int x; public: void method(int a) { x = a; // and possibly other things }; }; 我们想让这个方法是线程安全的:意味着从一个任意的线程和多个线程同时调用它,不应该引入未定义的行为。 Qt提供哪些机制/ API来帮助我们使这个方法成为线程安全的? 当方法执行“其他事情”时,来自Qt的什么机制/ API可以使用? 是否有任何分类可能的“其他事情”,可以告诉什么Qt特定的机制/ API使用? 脱离主题是由C ++标准本身提供的机制,以及确保线程安全的通用/非Qt特定方法。

Angularjs $ q.all

我在angularjs中实现了$ q.all,但是我不能让代码工作。 这是我的代码: UploadService.uploadQuestion = function(questions){ var promises = []; for(var i = 0 ; i < questions.length ; i++){ var deffered = $q.defer(); var question = questions[i]; $http({ url : 'upload/question', method: 'POST', data : question }). success(function(data){ deffered.resolve(data); }). error(function(error){ deffered.reject(); }); promises.push(deffered.promise); } return $q.all(promises); } 这里是我的控制器,它叫服务: uploadService.uploadQuestion(questions).then(function(datas){ //the datas can not […]

如何在Javascript中顺序运行Q的承诺?

我正在顺利地履行承诺。 var getDelayedString = function(string) { var deferred = Q.defer(); setTimeout(function() { document.write(string+" "); deferred.resolve(); }, 500); return deferred.promise; }; var onceUponATime = function() { var strings = ["Once", "upon", "a", "time"]; var promiseFuncs = []; strings.forEach(function(str) { promiseFuncs.push(getDelayedString(str)); }); //return promiseFuncs.reduce(Q.when, Q()); return promiseFuncs.reduce(function (soFar, f) { return soFar.then(f); }, Q()); }; getDelayedString("Hello") .then(function() […]

jQuery固有的问题$ .Deferred(jQuery 1.x / 2.x)

@Domenic在jQuery延期对象的缺陷方面有一篇非常透彻的文章: 你错过了 Promise的要点。 其中,Domenic突出了jQuery承诺的一些缺点,包括Q ,when.js,RSVP.js和ES6承诺。 我从Domenic的文章中离开,感觉jQuery的承诺在概念上有一个固有的失败。 我正在试图把这个概念的例子。 我收集了jQuery实现的两个问题: 那么这个方法是不可链接的 换一种说法 promise.then(a).then(b) jQuery将在promise满足时调用a then b 。 因为如果在其他承诺库中返回新的承诺,它们的等价物将是: promise.then(a) promise.then(b) 2.exception处理在jQuery中冒泡。 另一个问题似乎是exception处理,即: try { promise.then(a) } catch (e) { } Q中的等价物将是: try { promise.then(a).done() } catch (e) { // .done() re-throws any exceptions from a } 在jQuery中,当catch块失败时抛出exception并且冒泡。 在其他承诺中, a任何exception都将传递给.done或.catch或其他asynchronous捕获。 如果承诺的API调用都没有捕获到它会消失的exception(因此Q是使用.done释放任何未处理的exception的最佳做法)。 上述问题是否涵盖了jQuery实现promise的问题,还是我误解或错过了一些问题? 编辑这个问题涉及到jQuery <3.0; 作为jQuery 3.0 alpha jQuery是Promises […]

不是承诺只是callback?

我一直在开发JavaScript几年,我根本不明白承诺的大惊小怪。 看来我所做的只是改变: api(function(result){ api2(function(result2){ api3(function(result3){ // do work }); }); }); 我可以使用类似asynchronous的库,像这样: api().then(function(result){ api2().then(function(result2){ api3().then(function(result3){ // do work }); }); }); 哪些是更多的代码和更less的可读性。 我在这里没有获得任何东西,也不是突然神奇的“平坦”。 更不用说把事情转化为承诺。 那么,在这里承诺有什么大惊小怪呢?

什么是明确的承诺build设反模式,我如何避免它?

我正在编写的代码看起来像这样: function getStuffDone(param) { | function getStuffDone(param) { var d = Q.defer(); /* or $q.defer */ | return new Promise(function(resolve, reject) { // or = new $.Deferred() etc. | // using a promise constructor myPromiseFn(param+1) | myPromiseFn(param+1) .then(function(val) { /* or .done */ | .then(function(val) { d.resolve(val); | resolve(val); }).catch(function(err) { /* .fail */ | […]

在返回从循环中调用的数据库查询检索到的数据中的问题

我在循环中做了多个mongoDB查询。 并希望将所有结果作为一个数据数组发送。但是,当我简单地使用返回来发送数据时,它只是简单地返回undefined,不要等待所有数据库请求的结果。 我也尝试使用q.moulde,但同样的问题。 码: var getPrayerInCat = function(data){ var result ; var finalData = []; if(data.length >0){ data.forEach(function(data2){ var id= data2.id; Prayer.find({prayerCat:id},function(err,prayer){ var deferred = Q.defer() if (err) { // … console.log('An error has occurred'); // res.send(err); result= finalData = err } else { if(!prayer){ // console.log(data2.id+'–0'); data2.prayersCount = 0; result = deferred.resolve(finalData.push(data2)) } else […]