Angular 向返回承诺的javascript方法添加延迟

Angular 向返回承诺的javascript方法添加延迟,angular,typescript,promise,timeout,settimeout,Angular,Typescript,Promise,Timeout,Settimeout,我目前正在尝试学习Angular 2、typescript、promises等。我已经为开发人员工具设置了一个小应用程序,并提供了一个只返回硬编码数据的服务。这仅用于测试目的 我想在service方法上添加shorttimeout来模拟服务器延迟,以测试我的一些控件,但是我找不到正确的语法来这样做。如何在服务呼叫中增加5秒延迟 开发者工具服务 @Injectable() export class DeveloperService { getExampleData(): Promise&l

我目前正在尝试学习Angular 2、typescript、promises等。我已经为开发人员工具设置了一个小应用程序,并提供了一个只返回硬编码数据的服务。这仅用于测试目的

我想在service方法上添加shorttimeout来模拟服务器延迟,以测试我的一些控件,但是我找不到正确的语法来这样做。如何在服务呼叫中增加5秒延迟

开发者工具服务

@Injectable()
export class DeveloperService {
    getExampleData(): Promise<ExampleItem[]> {
        const examples: ExampleItem[] = [];
        examples.push({ id: 1, name: 'Spaceman Spiff', location: 'Outer Space', age: 12 });
        examples.push({ id: 2, name: 'Stupendous Man', location: 'The City', age: 30.5 });
        examples.push({ id: 3, name: 'Tracer Bullet', location: 'The City', age: 24 });
        examples.push({ id: 4, name: 'Napalm Man', location: 'War Zone', age: 43.333 });
        examples.push({ id: 5, name: 'Adult Calvin', location: 'In the future', age: 54 });

        // TODO: Slow down this return!
        return Promise.resolve(examples);
    }
}
@Injectable()
导出类DeveloperService{
getExampleData():承诺{
常量示例:ExampleItem[]=[];
push({id:1,名称:'Spaceman Spiff',位置:'Outer Space',年龄:12});
push({id:2,姓名:'了不起的人',地点:'城市',年龄:30.5});
push({id:3,名称:'Tracer Bullet',位置:'The City',年龄:24});
推送({id:4,姓名:“凝固汽油弹人”,地点:“战区”,年龄:43.333});
push({id:5,姓名:'成年卡尔文',位置:'未来',年龄:54});
//TODO:慢一点返回!
返回承诺。解决(示例);
}
}
开发者工具应用程序

getExampleData() {
    return (): Promise<Array<any>> => {
        return this.developerService.getExampleData();
    };
}
getExampleData(){
return():Promise=>{
返回这个.developerService.getExampleData();
};
}
更新:1 我已经尝试将setTimeout()添加到我试图实现的控件调用中,但它从未在此时填充数据。我真的很想把延迟加入服务调用方法中,这样我就不必反复实现它了

getExampleData() {
    setTimeout(() => (): Promise<Array<any>> => {
        return this.developerService.getExampleData();
    }, 3000);
}
getExampleData(){
设置超时(()=>():承诺=>{
返回这个.developerService.getExampleData();
}, 3000);
}
延迟的本机承诺 解决
未定义问题的新承诺
用价值来解决的新承诺
现有承诺
延迟的蓝鸟承诺
Bluebird promise库具有更好的性能和方便的功能,可以直接用于延迟promise链

解决
未定义问题的新承诺
用价值来解决的新承诺
现有承诺
RxJS延迟承诺
RxJS已经在Angular 2/4项目中使用,可以使用RxJS操作符和较小的开销创建或转换承诺

解决
未定义问题的新承诺
用价值来解决的新承诺
现有承诺
RxJS 6的延迟结果
您可以使用以下代码将RxJs 6中的值延迟
n
ms

无特定值(将发出
0
) 有一个设定值 或

信守诺言 还愿 将
.toPromise()
放在前面任何示例的
管道之后

return timer(n).toPromise();

等等。

您在getExampleData函数中尝试过setTimeout函数吗?我已经尝试过了,但我尝试使用的网格控件从未返回数据。它只是无限期地坐在一个旋转的图标上。我怀疑这是网格的问题,因为它在毫无问题地访问真实数据库时工作。
return new Promise(resolve => 
  setTimeout(() => resolve(value), 5000)
);
return promise.then(value => 
  new Promise(resolve => 
    setTimeout(() => resolve(value), 5000)
  )
);
return Bluebird.delay(5000);
return Bluebird.resolve(value).delay(5000);
// or
return Bluebird.delay(5000).return(value);
return bluebirdPromise.delay(5000);
return Observable.of().delay(5000).toPromise();
// or
return Observable.interval(5000).first().toPromise();
return Observable.of(value).delay(5000).toPromise();
return Observable.fromPromise(promise).delay(5000).toPromise();
return timer(n);
return of(value).pipe(delay(n));
return timer(n).pipe(mapTo(value));
return from(promise).pipe(delay(n));
return timer(n).toPromise();
return of(value).pipe(delay(n)).toPromise();