Q承诺.“何时”和“然后”之间的差异
Q promise. Difference between .when and .then
我认为这段代码可以工作:
var promise = function(val) {
var _val = val;
return setTimeout(function(_val) {
var newVal = val / 10;
return {
newVal : newVal,
message : 'it just to be a ' + val
};
}, 3000);
};
Q.when(promise(400)).then(function(obj) {
return console.log('jaaaaj !', obj);
}, function() {
return console.log('no yet...');
});
JSFiddle
我的想法是:当setTimeout在四秒钟后完成它的工作时,Q库将在第一次回调中捕获return,并显示具有两个属性的对象:newVal : 4
和message : 'it just to be a ' + 400
。相反,我在成功回调中有一个奇怪的1数字作为obj。。。
BTW Q库中的.when
和.then
有什么区别?
.when()
将一个或多个promise作为参数。您正在向它传递一个计时器句柄,因此它将立即执行.then()
处理程序。
.when()
没有辨别你传递给它的东西何时完成的神奇能力。你必须通过一个或多个承诺,它会监控这些承诺何时得到解决。
此外,不能从setTimeout()
返回任何内容,但如果在setTimeout()
中解析了promise,则可以将数据传递给.resolve()
方法。
你可以这样做:
var promise = function(val) {
var defer = Q.defer();
setTimeout(function() {
var newVal = val / 10;
defer.resolve({
newVal : newVal,
message : 'it just to be a ' + val
});
}, 3000);
// return the promise
return defer.promise;
};
Q.when(promise(400)).then(function(obj) {
return console.log('jaaaaj !', obj);
}, function() {
return console.log('rejected...');
});
但是,当你只有一个承诺时,你甚至不需要Q.when()
。你可以这样做:
promise(400).then(function(obj) {
return console.log('jaaaaj !', obj);
}, function() {
return console.log('rejected...');
});
相关文章:
- 函数参数中的数据与指定变量之间的任何性能差异
- 全局变量和全局对象的属性之间有什么区别吗
- 我的职位回报太快了,如何做出承诺
- 打破承诺链的好方法是什么
- java.net和javascript之间正则表达式的差异
- 关于承诺/A+规范,术语“当时可”和“承诺”之间有什么区别
- 两个函数之间的角度承诺
- JS承诺:然后和捕获之间有什么区别
- 成功之间的区别,然后随着决心,承诺,http在angularjs中
- 返回承诺与返回承诺内未定义之间的区别
- Q承诺.“何时”和“然后”之间的差异
- Q - 在 DAG 中执行一系列承诺并定义它们之间的依赖关系
- 承诺的两种实现之间的差异
- angular承诺对象之间的区别
- 如何重用一个函数,是在一个链之间的then(承诺相关)
- 承诺输出在NodeJs和Browser之间是不同的
- 在承诺数组之间添加延迟
- 如何在for循环中组织承诺,并在javascript函数之间传递参数
- 组件之间的AngularJS通过模板进行通信(带有承诺)
- 当“循环”时,不能在本机承诺之间传递数据;他们