同步功能中的承诺永远无法解决

时间:2017-11-23 04:47:40

标签: asynchronous promise resolve

当异步函数中的promise函数永远不会被解析或拒绝时会发生什么,所以在下面的save方法中,如果条件都不满足初始条件会发生什么,它不会给出错误,它会一直等到那里直到响应接收?

save().then(results=>{

})

save():promise<any>{
  if (conditionA) {
    return http request
  }
  if (conditonB) {
    return http request}
  }
}

2 个答案:

答案 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条件中不满足任何条件且什么也没有返回,则可以给出不确定的错误。