你不能让异步代码完全同步。但是,您可以使用async/await,如果您的目标浏览器支持,但它不是普遍支持的。此外,它只在async
函数内部看起来是同步的
基本思想是返回一个promise,然后await
它在一个async
函数中:
const getmefingerprint2 = async () => {
const secure = await (new Promise(resolve => {
new Fingerprint2().get((result, components) => resolve(result) )
}))
// do things with secure, whatever you return is thenable
return secure
}
该函数可以这样调用(因为 Promises):
getmefingerprint2().then(result => {
// do stuff with result
})
而且,在 async 函数内部,您可以secure
像同步获得它一样对待。
如果你真的想让你的异步代码表现得更加同步(如果你讨厌异步,可能对其他异步代码也有用),你可以将所有代码包装在一个async
函数中,然后await
用来获取异步内容:
const getFingerprint = () => new Promise(resolve => {
new Fingerprint2().get((result, components) => resolve(result) )
})
const main = async () => {
// do some of your app here
const secure = await getFingerprint()
// do more stuff here
}
main()
或作为IIFE:
(async() => {
// do some of your app here
const secure = await getFingerprint()
// do more stuff here
})()
这些只是一种 hacky 变通方法,可以让您摆脱异步代码的负担,这可能值得了解,因为它会成为一个更好的应用程序。如果您将代码重构为仅包含依赖于secure
回调内部的内容,那么一旦您习惯了它,您将获得更好的性能、畅通的 UI 以及更容易推理的更动态的流程。