Angular 避免角度分析中的嵌套承诺
我正在使用在设备存储器(NativeScript应用程序)中存储多个变量 每个存储值的调用都会返回一个承诺: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. }); 存储多个值后,我需要将应用导航到主视图,但首先需要确认这些值已成功存储
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