【发布时间】:2017-06-19 18:44:09
【问题描述】:
我正在尝试创建一个包装承诺的 JavaScript/typescript 函数,方法是返回一个新的 Promise,添加一个 try catch 和一个回调以供用户编写代码。这是概念:
function XPromise(code) {
return new Promise((resolve, reject) => {
try {
resolve(code());
} catch (exception) {
reject(exception);
}
});
}
但是我将如何在这样的情况下使用上面的 sn-p:
async function GetData(testClient, project, testPlan, suiteId) {
return XPromise(code => {
console.debug("GetData");
testClient.getData(project, testPlan, suiteId)
.then(data => {
if (data.length === 0) reject(data);
resolve(data);
});
}
遗留代码使用 .then 构造,这是放置拒绝和解析的理想位置,但不存在执行此操作的函数。
如果我这样做:
function XPromise(code, resolve, reject) {
return new Promise((resolve, reject) => {
try {
resolve(code());
} catch (exception) {
reject(exception);
}
});
}
async function GetData(testClient, project, testPlan, suiteId) {
return XPromise(code => {
console.debug("GetData");
testClient.getData(project, testPlan, suiteId)
.then(data => {
if (data.length === 0) reject(data);
resolve(data);
});
},
resolve => { },
reject => { }
}
我不知道如何让 then 逻辑在“低级”函数中执行它。
我想要新的 Promise 包装器的原因是我有大量的这些东西要实现......我不想在整个代码中这样做。这段代码可以编译,但需要我为我实现的每个函数编写 New Promises 和 Try Catch 语句。
async function GetData(testClient, project, testPlan, suiteId) {
return new Promise((resolve, reject) => {
console.debug("GetPoints");
try {
testClient.getData(project, testPlan, suiteId)
.then(data => {
if (data.length === 0) reject(data);
resolve(data);
});
} catch (exception) { reject(exception); }
});
}
【问题讨论】:
标签: javascript asynchronous typescript async-await