在以下情况下尝试解决延迟时遇到了一些问题
services.factory('MyService', ['$q',
function($q) {
var Foo = function() {
var deferred = $q.defer();
window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem;
window.requestFileSystem(window.TEMPORARY, 1024 * 1024, deferred.resolve, this.errorHandler);
return deferred.promise;
}
return {
Foo: Foo
}
}
]);
然后在控制器内部:
var bar = new MyService.Foo().then(function(cb) {
console.log(cb)
});
如果我在 requestFileSystem 函数之外使用 deferred.resolve ,那么它可以正常工作,但在上述情况下没有任何反应。PS:requestFileSystem 函数的第三个参数是一个回调,它一旦准备好就获取一个文件系统对象。
编辑:这是酒吧:
Object {then: function, catch: function, finally: function}
requestFileSystem 的第四个参数是一个记录到控制台文件系统 API 初始化错误的函数,但在这种情况下它没有被调用,因为 requestFileSystem 是成功的,所以应该调用 deferred.resolve。如果我将 deferred 替换为正常功能:
window.requestFileSystem(window.TEMPORARY, 1024 * 1024, function(filesystem){
console.log(filesystem);
}, this.errorHandler);
然后正确返回文件系统对象:
DOMFileSystem {root: DirectoryEntry, name: "http_127.0.0.1_3000:Temporary"}
编辑2:
我试图通过用我自己的函数模拟 requestFilesystem 函数来做一个简单的测试,它可以工作:
var Foo = function() {
var deferred = $q.defer();
asd(deferred.resolve)
return deferred.promise;
}
function asd(callback) {
callback('it works')
}
MyService.Foo().then(function(cb){
console.log(cb)
})