Angular 避免角度分析中的嵌套承诺

Angular 避免角度分析中的嵌套承诺,angular,nativescript,angular-promise,Angular,Nativescript,Angular Promise,我正在使用在设备存储器(NativeScript应用程序)中存储多个变量 每个存储值的调用都会返回一个承诺: this.secureStorage = new SecureStorage(); secureStorage.set({ key: "foo", value: "val1" }).then( function(success) { //move on to the next one. }); 存储多个值后,我需要将应用导航到主视图,但首先需要确认这些值已成功存储

我正在使用在设备存储器(NativeScript应用程序)中存储多个变量

每个存储值的调用都会返回一个承诺:

this.secureStorage = new SecureStorage();
secureStorage.set({
  key: "foo",
  value: "val1"
}).then(
  function(success) {
    //move on to the next one.
});
存储多个值后,我需要将应用导航到主视图,但首先需要确认这些值已成功存储

我如何避免嵌套这些调用(这确实有效,但对于许多值来说不太合适):


您可以使用
Promise.all([array of promises])
或使用Typescript async/await

既然您将问题标记为角度,我假设您使用的是Typescript 1.7+,那么您可以使用这种方式


您可以使用
Promise.all([array of promises])
或使用Typescript async/await

既然您将问题标记为角度,我假设您使用的是Typescript 1.7+,那么您可以使用这种方式


RezaRahmati的答案是可靠的

另一种方法是将承诺转化为可观察的

import { fromPromise } from 'rxjs/observable/fromPromise';
import { mergeMap } from 'rxjs/operators';

const secureStorage = new SecureStorage();
const store = (key, value) => fromPromise(secureStorage.set({key, value}));
以下是顺序存储:

store('foo1', 'value1')
   .pipe(
       mergeMap(() => store('foo2', 'value2')),
       mergeMap(() => store('foo3', 'value3'))
   ).subscribe(
      () =>  {/* Handle success */ }, 
      err => {/* Handle error*/ }
   )
或与允诺相当。全部(…):


RezaRahmati的答案是可靠的

另一种方法是将承诺转化为可观察的

import { fromPromise } from 'rxjs/observable/fromPromise';
import { mergeMap } from 'rxjs/operators';

const secureStorage = new SecureStorage();
const store = (key, value) => fromPromise(secureStorage.set({key, value}));
以下是顺序存储:

store('foo1', 'value1')
   .pipe(
       mergeMap(() => store('foo2', 'value2')),
       mergeMap(() => store('foo3', 'value3'))
   ).subscribe(
      () =>  {/* Handle success */ }, 
      err => {/* Handle error*/ }
   )
或与允诺相当。全部(…):

每@johnrsharpe:

Promise 
    .all( [
        this.secureStorage.set({
           key: "foo1",
           value: "value1"
        }),
        this.secureStorage.set({
           key: "foo2",
           value: "value2"
        }),
        this.secureStorage.set({
           key: "foo3",
           value: "value3"
        })
    ])
    .then(success => {
        //navigate to home view
    });
每@johnrsharpe:

Promise 
    .all( [
        this.secureStorage.set({
           key: "foo1",
           value: "value1"
        }),
        this.secureStorage.set({
           key: "foo2",
           value: "value2"
        }),
        this.secureStorage.set({
           key: "foo3",
           value: "value3"
        })
    ])
    .then(success => {
        //navigate to home view
    });

承诺。所有(…)
?@jornsharpe啊@正如jonrsharpe所说,构建一个承诺数组,并调用
Promise.all(myarray)
,这使得承诺并行运行。如果您需要知道任何承诺的结果,您可以在NS应用程序中启用async/Wait,如图所示
Promise.all(…)
?@jonrsharpe-Ah@正如Jornsharpe所说,构建一个承诺数组,并调用
Promise.all(myarray)
,这使得承诺并行运行。如果您需要知道任何承诺的结果,您可以在这里看到的NS应用程序中启用async/Wait