gpt4 book ai didi

javascript - 使用 Bluebird promise chrome API

转载 作者:行者123 更新时间:2023-11-29 10:31:06 25 4
gpt4 key购买 nike

我正在尝试使用 Bluebird.js promise chrome.storage.sync.get。我看到 Bluebird 上的所有例子http://bluebirdjs.com/docs/working-with-callbacks.html站点使用 Promise.promisify(require(someAPI))。我试着做const storageGet = Promise.promisify(chrome.storage.sync.get);(我没有要求,如果这会影响任何东西),然后调用

async function() {
return await storageGet('config', function (result) {
// do stuff
})
};

控制台错误是

Unhandled rejection Error: Invocation of form get(string, function, function) 
doesn't match definition get(optional string or array or object keys, function
callback)

我的理解(当然对 Promises 和 bluebird 知之甚少)是 storageGet 被传递了错误的参数?但是 chrome.storage.sync.get 需要传递一个字符串和一个回调函数,所以我不太确定出了什么问题。此外,我可能完全不了解我如何 promise chrome 存储。

我知道在 http://bluebirdjs.com/docs/api/promise.promisifyall.html#option-promisifier 有一个 chrome promisifying 的例子,但老实说,我不太熟悉 promise ,无法理解该示例中发生的事情。

我应该通过某种方式来 promise chrome 存储,而不是我正在做的方式吗?

最佳答案

您想使用 Bluebird promise 的函数的回调 API 必须符合 NodeJS 回调约定:“错误优先,单参数”(如 HERE 所述)。根据storage sync documentation它的 API 不符合 Bluebird 要求的 API:

StorageArea.get(string or array of string or object keys, function callback)

/* Callback with storage items, or on failure (in which case runtime.lastError will be set).

The callback parameter should be a function that looks like this:

function(object items) {...};*/

根本没有错误参数。这种方法甚至没有抛出任何错误。它只公开结果。您可以通过用 Promise 包装给定的方法轻松地将它变成基于 Promise 的 API:

function getFromStorageSync(key) {
return new Promise(function(resolve) {
chrome.storage.sync.get(key, function(items) {
resolve(items)
})
})
}

getFromStorageSync('someKey').then(function(items) { console.log(items) })

关于javascript - 使用 Bluebird promise chrome API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45848352/

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