我有下面的代码:
.then(function () {
/*first block*/
service.firstMethod()
})
.then(function () {
/*second block*/
some logic;
})
service.firstMethod = function () {
some plain code;
otherService.serverCall(arguments)
.then(function (result) {
processing result;
})
.then(function (result)
processing result;
})
.then(function (result) {
processing result;
})
.then(function (result) {
processing result;
});
});
};
当从第一个块调用firstMethod()时-它正在运行一些普通代码,然后转到第二个块,并且仅在第二个块执行完对服务器的调用之后,依此类推。在开始第二个块的执行之前,如何使整个firstMethod得以执行?这是一个相当老的项目,没有异步/等待功能。
最佳答案
我认为您正在寻找这样的东西:
var service = {};
service.subMethod = new Promise(function (resolve) {
setTimeout(function () {
// waiting 3 seconds
console.log('subMethod done...');
resolve();
}, 3000);
});
service.firstMethod = new Promise(function (resolve) {
service.subMethod.then(function () {
console.log('firstMethod done...');
resolve();
});
});
service.secondMethod = new Promise(function (resolve) {
setTimeout(function () {
// waiting 5 seconds
console.log('secondMethod done...');
resolve();
}, 5000);
});
var main = new Promise(function (resolve) {
service.firstMethod.then(service.secondMethod);
});
首先,我们启动
firstMethod
,在此方法中,我们调用subMethod
。完成subMethod
后,我们完成了firstMethod
并继续secondMethod
注意:您也可以使用回调来做到这一点。
关于javascript - 如何在JS中正确链接Promise?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60201879/