Javascript 履行承诺的麻烦
用户将单击一个按钮,该按钮将调用:Javascript 履行承诺的麻烦,javascript,typescript,promise,es6-promise,Javascript,Typescript,Promise,Es6 Promise,用户将单击一个按钮,该按钮将调用: private _saveJobCreate(): void { if ((this.state.jobToCreate.TruckLookUpId && this.state.jobToCreate.TruckLookUpId !== undefined) && (this.state.jobToCreate.DeliveryDate && this.state.jobToCreate.Delive
private _saveJobCreate(): void {
if ((this.state.jobToCreate.TruckLookUpId && this.state.jobToCreate.TruckLookUpId !== undefined) &&
(this.state.jobToCreate.DeliveryDate && this.state.jobToCreate.DeliveryDate.length > 0)) {
console.log("valid input, should save");
this._createJob(this.state.jobToCreate)
.then(() => {
console.log("job created and should be fetched, hiding panel");
this._hideJobCreatePanel();
});
}
}
它调用此方法:
private _createJob(newJob: IDeliveryJob): Promise < void > {
console.log("creating job");
let promise: Promise < void > = new Promise < void > ((resolve, reject) => {
this.props.deliveryJobService.createJob(newJob)
.then(() => {
console.log("job created, fetching jobs");
this._fetchJobs()
.then(() => {
});
});
});
return promise;
}
private\u createJob(newJob:IDeliveryJob):承诺{
console.log(“创建作业”);
让承诺:承诺=新承诺((决定,拒绝)=>{
this.props.deliveryJobService.createJob(newJob)
.然后(()=>{
log(“创建作业,获取作业”);
这个。_fetchJobs()
.然后(()=>{
});
});
});
回报承诺;
}
将从Sharepoint列表中获取我的作业:
private _fetchJobs(): Promise < void > {
console.log("fetching jobs");
let promise: Promise < void > = new Promise < void > ((resolve, reject) => {
this.props.deliveryJobService.getDeliveryJobs()
.then((newJobs: IDeliveryJob[]) => {
console.log("jobs fetched, setting state");
this.setState({
jobs: newJobs
});
});
});
return promise;
}
private\u fetchJobs():承诺{
log(“获取作业”);
让承诺:承诺=新承诺((决定,拒绝)=>{
this.props.deliveryJobService.getDeliveryJobs()
.然后((newJobs:IDeliveryJob[])=>{
log(“已获取作业,设置状态”);
这是我的国家({
工作:新工作
});
});
});
回报承诺;
}
问题是它停止设置状态,我看到的最后一个console.log是:
正在获取作业DeliveryJobService.ts:59 response.json:ƒ(){return
this.nativeResponse.json()}DeliveryJobService.ts:63 response.value:
(24) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…},
{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]
TruckDeliverySchedule.tsx:已获取503个作业,正在设置状态
因此,看起来最后一个方法\u fetchJobs()
没有返回其承诺
,因此第一个方法可以调用\u hideJobCreatePanel()
我对typescript/javascript开发相当陌生,我不明白为什么最后的
承诺没有得到回报。你永远不会解决或拒绝-拒绝任何你的承诺,更重要的是,你陷入了把完美的承诺包装在自己的承诺中的境地
例如,与此相反:
private _fetchJobs(): Promise<void> {
console.log("fetching jobs");
let promise: Promise<void> = new Promise<void>((resolve, reject) => {
this.props.deliveryJobService.getDeliveryJobs()
.then((newJobs: IDeliveryJob[]) => {
console.log("jobs fetched, setting state");
this.setState ({
jobs: newJobs
});
});
});
return promise;
}
您的每个方法都应该返回承诺,而不是将其封装在新方法中,这样您的问题就不再存在了。。。更重要的是,您可以链接调用,这使代码更具可读性。问题是您在不需要的地方使用Promise构造函数
private _fetchJobs(): Promise<void> {
console.log("fetching jobs");
return this.props.deliveryJobService.getDeliveryJobs().then((newJobs: IDeliveryJob[]) => {
console.log("jobs fetched, setting state");
this.setState ({
jobs: newJobs
});
});
}
private\u fetchJobs():承诺{
log(“获取作业”);
返回此.props.deliveryJobService.getDeliveryJobs()。然后((新作业:IDeliveryJob[])=>{
log(“已获取作业,设置状态”);
这是我的国家({
工作:新工作
});
});
}
private _createJob(newJob: IDeliveryJob): Promise<void> {
console.log("creating job");
return this.props.deliveryJobService.createJob(newJob)
.then(() => {
console.log("job created, fetching jobs");
return this._fetchJobs() // HERE!
.then(() => {
});
});
}
private _fetchJobs(): Promise<void> {
console.log("fetching jobs");
return this.props.deliveryJobService.getDeliveryJobs().then((newJobs: IDeliveryJob[]) => {
console.log("jobs fetched, setting state");
this.setState ({
jobs: newJobs
});
});
}