auth0.js
有一个函数,用于解析URL哈希片段并从中提取身份验证结果。我将这个函数包装在一个名为loadSession
的函数中,如下所示:
public loadSession(): void {
this.auth0.parseHash((err, authResult) => {
if (authResult) {
window.location.hash = '';
localStorage.setItem('token', authResult.accessToken);
// TODO (1)
} else if (err) {
// TODO (2)
}
});
}
如上所示,parseHash
将回调函数作为参数,我无法控制它。我希望loadSession
返回Promise
,该// TODO (1)
将在// TODO (2)
处得到解决,并在obj.loadSession().then(() => { // do something if successful }).catch((err) => { // raise error if not })
处被拒绝。这样我可以 $query = "SELECT adapterType FROM repair WHERE repairID = '$repairID'";
$result = mysqli_query($mysqli, $query);
list($adapter) = mysqli_fetch_row($result);
答案 0 :(得分:3)
只需将其包含在承诺中:
public loadSession() {
return new Promise((resolve, reject) => {
this.auth0.parseHash((err, authResult) => {
if(authResult) {
window.location.hash = '';
localStorage.setItem('token', authResult.accessToken);
resolve(authResult);
} else if (err) {
reject(err);
}
});
});
}
答案 1 :(得分:1)
你几乎可以将任何回调函数传递给一个返回给定的函数的函数:
以下是一个例子:
--- a/client/.babelrc
+++ b/client/.babelrc
@@ -5,10 +5,6 @@
}],
"stage-2"
],
- "plugins": ({
- new webpack.DefinePlugin({
- 'process.env.NODE_ENV': JSON.stringify('development')
- }),
"env": {
"test": {
"presets": ["env", "stage-2"],
答案 2 :(得分:0)
public loadSession(): Promise {
return new Promise((resolve, reject) => {
this.auth0.parseHash((err, authResult) => {
if (authResult) {
window.location.hash = '';
localStorage.setItem('token', authResult.accessToken);
// TODO (1)
// resolve(something)
} else if (err) {
// TODO (2)
// reject(something)
}
});
}
有关使用Promise
API的详情,请访问MDN Docs
答案 3 :(得分:0)
或者你可以使用一个很小的库来为你做到这一点:GitHub上的promisify-auth0,npmjs.org上的promisify-auth0。
现已更新为版本9.5.1
。