作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我在理解如何使用“q”(https://github.com/kriskowal/q) 一个用于 javascript 的 promise 库时遇到了一些问题:
var delayOne = function() {
setTimeout(function() {
return 'hi';
}, 100);
};
var delayTwo = function(preValue) {
setTimeout(function() {
return preValue + ' my name';
}, 200);
};
var delayThree = function(preValue) {
setTimeout(function() {
return preValue + ' is bodo';
}, 300);
};
var delayFour = function(preValue) {
setTimeout(function() {
console.log(preValue);
}, 400);
};
Q.fcall(delayOne).then(delayTwo).then(delayThree).then(delayFour).end();
这只会返回未定义的...
最佳答案
正如 wroniasty 所指出的,您需要从这些函数中的每一个返回一个 promise ,但您还应该尽可能抽象任何面向回调的 API(如 setTimeout
)并使用返回 promise 的 API相反。
在 setTimeout
的情况下,Q 已经提供了 Q.delay(ms)
,它返回一个将在指定的毫秒数后解决的 promise ,非常适合替换设置超时
:
var delayOne = function() {
return Q.delay(100).then(function() {
return 'hi';
});
};
var delayTwo = function(preValue) {
return Q.delay(200).then(function() {
return preValue + ' my name';
});
};
var delayThree = function(preValue) {
return Q.delay(300).then(function() {
return preValue + ' is bodo';
});
};
var delayFour = function(preValue) {
return Q.delay(400).then(function() {
console.log(preValue);
});
};
Q.fcall(delayOne).then(delayTwo).then(delayThree).then(delayFour).done();
(注意:end
已替换为 done
)
关于javascript - 我如何用 q 做一个回调链?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12461589/
我是一名优秀的程序员,十分优秀!