【发布时间】:2023-11-11 16:43:01
【问题描述】:
与我的上一个问题相似,但不同之处足以让我不知所措。我在 AngularJs 中有以下函数,需要在 VueJs 中重新创建。我有两种类似的方式我尝试在 VueJs 中编写这个,但是它们都导致了很多站点异常。
AngularJs
var foo = function(obj, config) {
if (config.skip) {
return $q.reject("Skipping");
}
var deferred = $q.defer();
obj.promise = deferred.promise;
if (obj.hasValue()) {
deferred.resolve(obj);
} else {
"/api/callToApi".$promise.then(function(res) {
if (res) {
deferred.resolve(res);
else {
deferred.reject(res);
}
});
}
return deferred.promise;
}
VueJs - 取 1。我很确定这个缺少实际的 Promise 链接,不知道如何正确设置它。
var foo = function(obj, config) {
let returnEarly = false;
let promise = new Promise((resolve, reject) => {
returnEarly = true;
reject("Skipping"):
}
if (returnEarly) {
return promise;
}
obj.promise = promise;
return new Promise((resolve, reject) => {
if (obj.hasValue()) {
resolve(obj);
} else {
axios.get("/api/callToApi").then(function(res) {
if (res) {
resolve(res);
} else {
reject(res);
}
}
}
}
}
执行 1 时出现控制台错误
Uncaught (in promise) Error: Request failed with status code 404
at XMLHttpRequest.__capture__.onreadystatechange
VueJs - 采取 2。我认为这种方式会返回正确的链接,但在运行 jest 测试时我收到错误 Timeout - Async callback was not invoked within the 5000ms timeout。
var foo = function(obj, config) {
let returnEarly = false;
let promise = new Promise((resolve, reject) => {
returnEarly = true;
reject("Skipping"):
}
if (returnEarly) {
return promise;
}
obj.promise = promise;
return promise.then(() => {
return new Promise((resolve, reject) => {
if (obj.hasValue()) {
resolve(obj);
} else {
axios.get("/api/callToApi").then(function(res) {
if (res) {
resolve(res);
} else {
reject(res);
}
}
}
}
}
}
【问题讨论】:
标签: javascript angularjs vue.js promise es6-promise