首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeError: fpPromise.then不是一个函数

TypeError: fpPromise.then不是一个函数
EN

Stack Overflow用户
提问于 2022-02-19 03:46:28
回答 1查看 95关注 0票数 1

我想使用指纹来获取设备id。这是类型记录代码,看起来如下:

代码语言:javascript
复制
const DeviceHandler = {
    getDeviceId: async (): Promise<string> => {
        return new Promise((resolve, reject) => {
            // Initialize an agent at application startup.
            const fpPromise = require('@fingerprintjs/fingerprintjs');

            // Get the visitor identifier when you need it.
            fpPromise
                .then((fp: { get: () => any; }) => fp.get())
                .then(async (result: { visitorId: any; }) => {
                    // This is the visitor identifier:
                    const deviceId = result.visitorId;
                    resolve(deviceId);
                });
        });
    }
};

export default DeviceHandler;

运行此代码时,将显示错误:

代码语言:javascript
复制
background.js:5253 Uncaught (in promise) TypeError: fpPromise.then is not a function
    at background.js:5253:26
    at new Promise (<anonymous>)
    at background.js:5248:35
    at step (background.js:5240:23)
    at Object.next (background.js:5221:53)
    at background.js:5215:71
    at new Promise (<anonymous>)
    at background.js:5211:12
    at Object.getDeviceId (background.js:5246:39)
    at background.js:4811:108

我跟踪了代码,发现fpPromise不是空的。为什么会发生这种事?如何解决这个问题?指纹版本是:

代码语言:javascript
复制
"@fingerprintjs/fingerprintjs": "^3.3.2",

这是如何在类型记录"ttypescript": "^1.5.13",中调用此函数。

代码语言:javascript
复制
import DeviceHandler from "@utils/data/DeviceHandler";
const deviceId = await DeviceHandler.getDeviceId();

节点版本是v16.13.2

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-19 04:03:24

使用import()内联导入模块将返回Promise<FingerprintJS> (因为它是异步的)。使用require()内联导入模块将直接返回FingerprintJS (因为它是同步的)。

对于您的应用程序,要匹配文档的第一个示例,您应该替换:

代码语言:javascript
复制
// here, fpPromise is a FingerprintJS object - not a Promise!
const fpPromise = require('@fingerprintjs/fingerprintjs');

使用

代码语言:javascript
复制
// here, fpPromise is a Promise<Agent> object
const fpPromise = require('@fingerprintjs/fingerprintjs').load();
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71181994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档