[英]Async function doesn't return, despite promise resolve() being called
[英]Resolve promise return by Async function
我已經讀過 Async 函數隱式返回一個由返回解析的承諾。 有沒有辦法讓 Async 函數返回該承諾,以便我們自己解決?
我有一個用例,我調用一個 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'))
}
})
}
如果我可以訪問 Async 函數返回的 Promise,我可以使用它來解析 chrome.storage.sync.get 中使用的 values 變量
要獲得類似於您想要的東西(即導出解析和拒絕回調),您需要執行以下操作:
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
關鍵字不能做你想做的事。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.