我有一个使用swagger-js启用api的控制器。然而,在swagger库获取swagger sepcification文件之前,api不可用。我希望控制器能够将此作为API加载,只有在swagger API可用且可以使用之后才能加载。
我怎样才能做到这一点?
答案 0 :(得分:0)
在Swagger配置完毕后,您必须在初始化阶段保留controller
(您的意思是service
?)。
我会通过$q
承诺来实现它,resolves
配置Swagger然后设计controller
上的所有其他函数(我会写一个service
包装器然而,在它周围,返回依赖于初始化承诺的then
分支的Promises。
实施将是这样的:
angular.module('myModule', [])
.service('swaggerService', ['$q', function ($q) {
var deferred = $q.Promise(),
initPromise = deferred.promise;
// This function should be called when Swagger is done initializing.
// It may be best to initialize Swagger here itself, if that is an option.
swatterInitCb(function (err) {
if (err) {
deferred.reject(err);
} else {
deferred.resolve();
}
});
return {
// This function will return a Promise.
getData: function (dataId) {
return initPromise.then(function (dataId) {
// Use Swagger (which is now guaranteed to be intialised)
// to get data from dataId
return data;
});
}
}
});