我正在努力理解延期和承诺。在理解核心概念之前,我不想使用任何库angularfire等。这就是我想要做的事情并且总是处于错误状态。请指教。 ........
var defObj = $.Deferred();
var fbref = new Firebase(<<firebase url>>);
defObj.done(function() {
console.log('Success')
}
);
defObj.fail(function() {
console.log('Fail')
}
);
defObj.resolve(
fbref.authAnonymously(function(error, authData) {
if (error) {
defObj.reject();
}
/*
else if (authData) {
defObj.resolve();
}
*/
});
return defObj.promise();
........
请忽略任何语法错误。之前我把fbref.auth匿名调用包装在一个单独的函数中。在调试模式下它失败但在运行模式下它总是成功。 我确信我的firebase实例未启用匿名身份验证。
编辑:misspelt title。
答案 0 :(得分:2)
Promise现在是JavaScript的官方部分,您可以在没有库的最新浏览器中使用它们。
function authAnonymously() {
// 1
var promise = new Promise(
function(resolve, reject) {
var ref = new Firebase(<<firebase url>>);
ref.authAnonymously(function(error, authData) {
if (error) {
reject(error); // 2
} else {
resolve(authData); // 3
}
});
});
}
authAnonymously()
.then((authData) => console.log(authData)) // 4
.catch((error) => console.error(error)); // 5
以下是此示例中的五个步骤
reject()
功能对其进行标记。 resolve()
函数标记它。authAnonymously()
函数并使用then()
函数开始承诺链。成功后,此功能将启动。error()
函数继续保证链。如果发生错误,catch()
函数将不会触发,但此error()
函数将会触发。承诺适用于一次性回调。对于Firebase,这非常适用于身份验证方法和once()
调用。这对于重复回调来说并不是很好,例如on()
函数。