Есть несколько проблем с кодом и вашим пониманием кода ...
data
не дата, возвращаемая обещанием. Это обещание . Вы можете получить данные обещания только после разрешения обещания. В этом случае данные обещания на самом деле x
- Использование ключевого слова
throw
всегда вызовет исключение, которое, если его не обработать, приведет к ошибке. В этом случае функция всегда будет выдавать исключение, поэтому я не уверен, какая цель здесь.
Чтобы фактически получить значение обещания в этой функции, есть два способа. Либо вы await
обещание, либо предоставляете функцию обратного вызова, которая будет вызвана при разрешении обещания ...
Асинхронный / ожидающий метод
export const getFieldChoice = async (key, listName, fieldName) => {
const value = cache.get(key) || { status: "new", data: null }
if (value.status === "resolved") return value.data;
const data = await spApi.lists.getByTitle(listName).fields.getByInternalNameOrTitle(fieldName).select('Choices').get();
value.data = data;
value.status = "resolved"
cache.set(key, value)
return value;
}
и затем он используется следующим образом
import { getFieldChoice } from "path/to/file";
async function caller () {
try {
const key = "key";
const listName = "list name";
const fieldName = "field name";
const data = await getFieldChoice(key, listName, fieldName);
// Rest of function logic
} catch (err) {
// Handle any error
}
}
Метод обратного вызова
export const getFieldChoice = (key, listName, fieldName, callback) => {
const value = cache.get(key) || { status: "new", data: null }
if (value.status === "resolved") return value.data;
spApi.lists.getByTitle(listName).fields.getByInternalNameOrTitle(fieldName).select('Choices').get().then(data => {
value.data = data;
value.status = "resolved"
cache.set(key, value)
callback(null, value);
}).catch(err => {
callback(err);
});
}
и затем он используется вот так
import { getFieldChoice } from "path/to/file";
function caller () {
const key = "key";
const listName = "list name";
const fieldName = "field name";
getFieldChoice(key, listName, fieldName, (err, value) => {
if (err) {
// Handle any error
}
// Rest of function logic
});
}
Надеюсь, это поможет ...