我有下面的代码:

.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/

10-09 13:28