vue js 引入sdk,思路代码整理 app.vue引入

发布时间 2023-12-29 10:34:29作者: yoona-lin

代码解析

function handleAuthReady() {
    const ywAuth = (window as any).ywAuth;
    if (ywAuth) {
        return Promise.resolve(ywAuth);
    }

    return new Promise(resolve => {
        setTimeout(() => {
            resolve(handleAuthReady());
        }, 100);
    });
}

export default {
    init() {
        const ywAuth = (window as any).ywAuth;
        if (typeof ywAuth !== 'undefined') {
            return Promise.resolve(ywAuth);
        }
        const AuthSDKUrl = 'https://www.cmpassport.com/h5/js/jssdk_yw_auth/jssdk.min.js';
        return new Promise(resolve => {
            // 插入script脚本
            const scriptNode = document.createElement('script');
            scriptNode.setAttribute('type', 'text/javascript');
            scriptNode.setAttribute('src', AuthSDKUrl);
            document.body.appendChild(scriptNode);
            /** 做一步延时操作用于等待sdk加载完成 */
            handleAuthReady().then((ywAuth: any) => {
                resolve(ywAuth);
            });
        });
    }
};

这段代码是一个模块的导出,默认导出一个对象,其中包含了一个名为 init 的方法。让我们逐行解析代码:

function handleAuthReady() {
    const ywAuth = (window as any).ywAuth;
    if (ywAuth) {
        return Promise.resolve(ywAuth);
    }

    return new Promise(resolve => {
        setTimeout(() => {
            resolve(handleAuthReady());
        }, 100);
    });
}

这是一个名为 handleAuthReady 的函数,用于处理认证准备就绪的逻辑。它首先检查全局变量 ywAuth 是否存在,如果存在则返回一个解析后的 Promise 对象,该 Promise 对象的结果为 ywAuth。如果 ywAuth 不存在,则创建一个新的 Promise 对象,并在 100 毫秒后通过递归调用 handleAuthReady 函数来尝试获取 ywAuth

export default {
    init() {
        const ywAuth = (window as any).ywAuth;
        if (typeof ywAuth !== 'undefined') {
            return Promise.resolve(ywAuth);
        }
        const AuthSDKUrl = 'https://www.cmpassport.com/h5/js/jssdk_yw_auth/jssdk.min.js';
        return new Promise(resolve => {
            // 插入script脚本
            const scriptNode = document.createElement('script');
            scriptNode.setAttribute('type', 'text/javascript');
            scriptNode.setAttribute('src', AuthSDKUrl);
            document.body.appendChild(scriptNode);
            /** 做一步延时操作用于等待sdk加载完成 */
            handleAuthReady().then((ywAuth: any) => {
                resolve(ywAuth);
            });
        });
    }
};

这段代码导出了一个默认对象,其中包含一个名为 init 的方法。init 方法用于初始化操作,首先检查全局变量 ywAuth 是否存在,如果存在则直接返回一个解析后的 Promise 对象,该 Promise 对象的结果为 ywAuth

如果 ywAuth 不存在,代码会创建一个新的 <script> 元素,并将其插入到文档的 <body> 元素中。这个 <script> 元素用于加载一个外部的 JavaScript SDK 文件,即 AuthSDKUrl 所指定的 URL。

在插入 <script> 元素后,代码会执行 handleAuthReady() 方法,并通过 then 方法等待 handleAuthReady 返回的 Promise 对象解析。一旦 Promise 对象解析完成,将会解析 ywAuth 并将其作为结果传递给外部的 Promise 对象,以完成整个初始化过程。

最终,这个对象会被导出为模块的默认导出,可以在其他地方通过导入该模块来使用其中的 init 方法。