当异步函数中的promise函数永远不会被解析或拒绝时会发生什么,所以在下面的save方法中,如果条件都不满足初始条件会发生什么,它不会给出错误,它会一直等到那里直到响应接收?
save().then(results=>{
})
save():promise<any>{
if (conditionA) {
return http request
}
if (conditonB) {
return http request}
}
}
答案 0 :(得分:1)
如果您的承诺有时会返回承诺,那么它应该总是返回承诺。如果您发现不需要在某些代码路径中返回承诺,那么通常的设计模式就是您只需执行$stateProvider
.state('app', {
url: '/:appId',
templateUrl: '../views/app.html',
controller: 'AppCtrl',
reloadOnSearch: false
})
.state('/app.items', {
url: '/items',
templateUrl: '../views/items.html',
controller: 'ItemsCtrl'
})
.state('app.upload', {
url: '/upload',
templateUrl: '../views/upload.html',
controller: 'UploadCtrl'
})
$urlRouterProvider.otherwise('/');
}])
。所以,保持你的伪代码,你会做这样的事情:
return Promise.resolve()
您填写上面save().then(results=>{
})
save():promise<any>{
if (conditionA) {
return request(...);
} else if (conditonB) {
return request(...);
} else {
return Promise.resolve(...);
}
}
部分以了解您的功能。但是,如果您有时会回复承诺,那么总是会回复承诺。然后,调用者可以始终如一地使用返回的promise。如果工作已经完成(或者没有任何事情要做),那么你只需返回一个已经解决的promise,并且调用者总是得到一个可以用作承诺的一致返回值。
请注意,这些都不符合您问题的标题,但它与您的问题正文完全匹配。您的标题是错误还是您的问题描述的某些部分缺失了?
答案 1 :(得分:0)
一个简单的答案应该是,如果从服务调用(http调用)的方法返回任何形式的promise,save()都不能不确定, 如果它从不解决,它将永远不会进入处理程序的一部分,但是它无法给出未定义的错误。 如果if else条件中不满足任何条件且什么也没有返回,则可以给出不确定的错误。