ionic2/angular2 中的后续承诺



我知道,这是一个新手问题:

我创建了一个移动应用程序,从蓝牙串行设备读取信息馈送。

使用以下

承诺检索数据:

myServiceClass.getRemoteValue(valueId).then(reply: number) {
   ...
}

我需要读取来自此提要的多个参数,并且必须等待上一次调用完成才能请求新值。

如果我运行:

let requiredValues = [1, 2, 3, 4, ..., n];
for (let i=0; i<requiredValues.length; i++) {
   myServiceClass.getRemoteValue(valueId).then(reply: number) {
      ...
   }
}

这样,请求将并行运行,但我需要它们一个接一个地按顺序运行。是否有任何解决方案可以以某种方式按顺序链接一系列承诺?

换句话说,只有在解决上一个承诺之后,我才需要运行第 n 个承诺。

非常感谢您的时间。

好吧,您可以使用递归方法来实现这一目标...请看一下这个 plunker(运行 plunker 时,请注意值正在控制台中打印(

我只是使用了一些虚假数据,但我想这足以给你一个整体的想法:

  public start(): void {
     this.getSeveralRemoteValues([1,2,3,4,5,6,7,8,9]);
  }
  private getSeveralRemoteValues(array): Promise<boolean> {
    if(array && array.length) {
      return this.getRemoteValueFromService(array[0]).then(() => {
        array.shift(); // remove the first item of the array
        this.getSeveralRemoteValues(array); // call the same method with the items left
      })
    } else {
      this.logEnd();
    }
  }
  private logEnd(): void {
    alert('All promises are done!');
  }
  private getRemoteValueFromService(value: number):  Promise<boolean> {
    // this simulates the call to the service
    return new Promise((resolve, reject) => {
        setTimeout(() => { 
          console.log(`Promise: ${value}`);
          resolve(true); 
        }, 1000);
    });
  }

相关内容

  • 没有找到相关文章