gpt4 book ai didi

javascript - 解决异步函数返回的promise

转载 作者:行者123 更新时间:2023-12-02 21:56:27 26 4
gpt4 key购买 nike

我读到异步函数隐式返回一个由返回解决的 promise 。有没有办法让异步函数返回该 promise ,以便我们可以自己解决它?

我有一个用例,我调用一个 api,它接受一个将被异步调用的函数。

/**
*
* @param {Array} keys - list of keys to get values
*/
let getStorageValues = async (keys) => {
// chrome.storage.sync.get accepts second argument which is called asynchronously.
chrome.storage.sync.get(keys, (values) => {
if (values) {
return values;
} else {
return new Error('throw')
}
})

}

相反,我想要类似的东西

let getStorageValues = async (keys) => {
let AsyncPromise = Async Function Promise.
chrome.storage.sync.get(keys, (values) => {
if (values) {
AsyncPromise.resolve(values);
} else {
AsyncPromise.reject(new Error('throw'))
}
})

}

如果我可以访问异步函数返回的 Promise,我可以使用它来解析 chrome.storage.sync.get 中使用的值变量

最佳答案

要获得与您认为想要的类似的内容(即导出解析和拒绝回调),您需要执行以下操作:

let getStorageValues = (keys) => { // Note: no async keyword because it is useless
let resolve;
let reject;

let AsyncPromise = new Promise((a,b) => {
resolve = a;
reject = b;
});

chrome.storage.sync.get(keys, (values) => {
if (values) {
resolve(values);
} else {
reject(new Error('throw'))
}
})

return AsyncPromise;
}

但这显然比平常要冗长得多:

let getStorageValues = (keys) => { // Note: no async keyword because it is useless
return new Promise((resolve,reject) => {
chrome.storage.sync.get(keys, (values) => {
if (values) {
resolve(values);
} else {
reject(new Error('throw'));
}
});
}
}

在 Node.js 上,您还可以修改代码以利用 util.promisify:

const util = require('util');

let getStorageValues = util.promisify((keys,errorFirstCallback) => {
chrome.storage.sync.get(keys, (values) => {
if (values) {
errorFirstCallback(null,values);
} else {
errorFirstCallback(new Error('throw'));
}
});
});

遗憾的是,async 关键字无法执行您认为您想要的操作。

关于javascript - 解决异步函数返回的promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59999292/

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