gpt4 book ai didi

javascript - 尝试将 promisified 函数重构为 try-catch block

转载 作者:行者123 更新时间:2023-12-02 23:06:46 25 4
gpt4 key购买 nike

我正在尝试使用 try-catch block 重构此代码:

export const authorizeConnectyCube = async (accessToken) => {
const userCredentials = {
provider: 'firebase_phone',
'firebase_phone[project_id]': "xxxxxxxx",
'firebase_phone[access_token]': accessToken,
};
await createSession();
return new Promise((resolve, reject) => {
ConnectyCube.login(userCredentials, (error, user) => {
user ? resolve(user) : reject(error);
})
}).catch(error => console.log(error));
}

const createSession = () => {
return new Promise((resolve, reject) => {
ConnectyCube.createSession((error, session) => {
session ? resolve(session.user) : reject(error)
})
}).catch(error => console.log(error));
}

但是我没有得到相同的结果 - 异步性似乎得到了不同的处理。这是我的重构尝试:

export const authorizeConnectyCube = async (accessToken) => {

const userCredentials = {
provider: 'firebase_phone',
'firebase_phone[project_id]': "xxxxxxxxxx",
'firebase_phone[access_token]': accessToken,
};

await createSession();
try {
ConnectyCube.login(userCredentials, (error, user) => {
return user;
})
}
catch (error) {
console.log(error)
}
}

const createSession = () => {
try {
ConnectyCube.createSession((error, session) => {
return session.user
})
} catch (error) {
console.log(error);
}
}

我有什么特定的错误吗?谢谢。

最佳答案

基于回调的 API 不容易转变为可用于 async/await 的东西(在幕后使用 Promise)。你必须首先“ promise ”它们(即将它们包裹在 promise 中)。

这是我想说的一个例子:

// Promisify these callback-based APIs.
const login = userCredentials => {
return new Promise((resolve, reject) => {
ConnectyCube.login(userCredentials, (error, user) => {
user ? resolve(user) : reject(error);
})
})
})

const createSession = () => {
return new Promise((resolve, reject) => {
ConnectyCube.createSession((error, session) => {
session ? resolve(session.user) : reject(error)
})
})
})

// Then use them in an async function
export const authorizeConnectyCube = async (accessToken) => {
const userCredentials = {
provider: 'firebase_phone',
'firebase_phone[project_id]': "xxxxxxxx",
'firebase_phone[access_token]': accessToken,
}

try {
await createSession()
return login(userCredentials)
} catch (e) {
console.warn(e)
}
}

此外,async 函数返回 Promise,解析的值是返回值,拒绝的值是内部抛出的任何 Uncaught Error 。包含在 Promise 中作为异步函数的返回值的值是多余的。

如果您使用的是 Node 8+,它有一个名为 promisify 的实用程序它接受基于回调的 API 并返回它的 promise 返回版本。

关于javascript - 尝试将 promisified 函数重构为 try-catch block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57557699/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com