Return 函数结果 "throw" 这是使用 throw 的正确方法吗?
Return function result with "throw" is this correct way to use throw?
我的一位同事发给我这个代码块:
export const getFieldChoice = (key, listName, fieldName) => {
const value = cache.get(key) || { status: "new", data: null }
if (value.status === "resolved") {
return value.data
}
const data = spApi.lists.getByTitle(listName).fields.getByInternalNameOrTitle(fieldName).select('Choices').get().then(x => {
value.data = x
value.status = "resolved"
cache.set(key, value)
})
throw data
}
然后我看到他returns的承诺数据是throw
。这是使用 throw
的正确方法吗?
代码和您对代码的理解存在一些问题...
data
不是承诺返回的日期。 这是诺言。您只能在 promise 解析时获取 promise 的 数据。这样的话,promise的数据其实就是x
- 使用
throw
关键字总是会引发异常,如果不处理,会导致错误。在这种情况下,该函数将始终抛出异常,所以我不确定这里的目标是什么。
要在此函数中实际获取 promise 的值,有两种方法。您 await
承诺或提供回调函数以在承诺解决时调用...
Async/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
});
}
希望这对您有所帮助...
我的一位同事发给我这个代码块:
export const getFieldChoice = (key, listName, fieldName) => {
const value = cache.get(key) || { status: "new", data: null }
if (value.status === "resolved") {
return value.data
}
const data = spApi.lists.getByTitle(listName).fields.getByInternalNameOrTitle(fieldName).select('Choices').get().then(x => {
value.data = x
value.status = "resolved"
cache.set(key, value)
})
throw data
}
然后我看到他returns的承诺数据是throw
。这是使用 throw
的正确方法吗?
代码和您对代码的理解存在一些问题...
data
不是承诺返回的日期。 这是诺言。您只能在 promise 解析时获取 promise 的 数据。这样的话,promise的数据其实就是x
- 使用
throw
关键字总是会引发异常,如果不处理,会导致错误。在这种情况下,该函数将始终抛出异常,所以我不确定这里的目标是什么。
要在此函数中实际获取 promise 的值,有两种方法。您 await
承诺或提供回调函数以在承诺解决时调用...
Async/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
});
}
希望这对您有所帮助...