gpt4 book ai didi

javascript - 我如何用 q 做一个回调链?

转载 作者:数据小太阳 更新时间:2023-10-29 04:01:36 26 4
gpt4 key购买 nike

我在理解如何使用“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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com