javascript(承诺)之谜
如果必须使用承诺,您将如何编写以下代码 其思想是“private”方法javascript(承诺)之谜,javascript,asynchronous,promise,Javascript,Asynchronous,Promise,如果必须使用承诺,您将如何编写以下代码 其思想是“private”方法p1调用执行异步操作的函数,然后,当异步调用的结果就绪时,控制权被传递给“private”方法p2。就像p1,p2调用一个函数,该函数执行一些异步内容,然后将控件传递回p1。在本例中,这将永远持续下去 您可以想象,我已经将代码简化为一个更具理论性的场景,使其简短。实际上,p1和p2正在做两件不同的事情,并且基于p1和p2中的某些条件,程序执行确实会停止 mySimpleRunner = (function () { va
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();
我已经尝试了许多可能的方法来对承诺执行相同的操作,其中,async不是将函数cb
传递给async,而是在计时器完成时解析的承诺。但我还没有弄明白如何正确地做到这一点
如果你有时间,想尝试一下,我会非常感激。真的没什么不同。唯一的问题是将回调传递给
,如果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);
}
其实差别不大。唯一的问题是将回调传递给,如果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);
}
仅供参考,function(){resolve(n);}
也会做同样的事情。仅供参考,function(){resolve(n);}
也会做同样的事情。