如果必须使用Promises,您会如何编写以下代码?
这个想法是"私人"方法p1
调用一个异步执行某个函数的函数,然后,当异步调用的结果准备就绪时,控件被传递给" private"方法p2
。就像p1
一样,p2
调用执行某些异步内容的函数,然后将控件传递回p1
。在这个例子中,这将永远持续下去。
正如您可以想象的那样,我已经将我的代码归结为一个更理论化的场景,以简化它。在实践中,p1
和p2
正在做两件事,根据p1
和p2
中的某些条件,程序执行会停止。
mySimpleRunner = (function () {
var service = {};
var async = function (cb) {
var n = Math.floor(Math.random() * 1000);
setTimeout(function () {
cb(n);
}, n);
}
var p1 = function (r) {
async(p2);
console.log("1:", r || "first call");
};
var p2 = function (r) {
async(p1);
console.log("2:", r);
};
service.run = function () {
p1();
}
return service;
})();
mySimpleRunner.run();
我已尝试过许多可能的方法来使用Promises,而不是将函数cb
传递给异步,async是一个在计时器完成时解析的Promise。但我还没弄清楚如何正确地做到这一点。
如果你有某个时间并想尝试一下,我真的很感激。
答案 0 :(得分:3)
真的不是很多不同。唯一的问题是,如果then
:
async
function async() {
return new Promise(function (resolve) {
var n = Math.floor(Math.random() * 1000);
setTimeout(resolve.bind(null, n), n);
});
}
function p1(r) {
async().then(p2);
console.log(r);
}
function p2(r) {
async().then(p1);
console.log(r);
}