【发布时间】:2019-09-28 21:01:47
【问题描述】:
承诺让我感到困惑。
我正在尝试制作一个模拟数据服务来模仿 axios。
我的模拟 put 调用将 targetUrl 传递给 _fetch,然后查看它是否是有效的 url 并返回一个带有延迟 .resolve 的新 Promise
const _returnResponse = (mockData, time = 0) => new Promise((resolve) => {
setTimeout(() => {
resolve(mockData);
}, time);
});
或带有延迟 .reject 的新 Promise
const _returnError = (time = simulatedDelay) => {
const returnValue = new Promise(((resolve, reject) => {
setTimeout(() => {
reject(new Error('error'));
}, time);
}));
return returnValue;
};
但是当我进行模拟 put 调用时,它会返回一个模拟数据,调用方法将其解释为成功,并且控制台会在其 .then 中登录
put(target, putBody) {
const returnValue = _fetch(target, simulatedDelay)
returnValue.then(response => _console('PUT', target, response, putBody));
return returnValue;
},
但是使用无效的目标控制台会记录未捕获的错误
或者这会正确处理错误,但控制台会记录未定义的响应
put(target, putBody) {
const returnValue = _fetch(target, simulatedDelay).then(response => _console('PUT', target, response, putBody));
return returnValue;
},
调用方法如下:
saveStuff({ commit, state }, newStuff) {
//other code
return this.$mockAxios.put(url, putBody)
.then((response) => {
return response;
});
},
我觉得我完全错过了一些东西,我已经研究了几个小时,但我仍然没有得到它。
【问题讨论】:
-
在理解您要对代码执行的操作时遇到一些困难。可能值得将隔离代码放入 JSFiddle 或类似的代码游乐场服务中。否则,如果您可以访问 ES7/babel,则最好使用带有
async和await关键字的异步函数,这使得异步编程更加容易和简单。 -
我不确定如何处理您的确切问题 - 但关于您的评论“Promises just baffle me”,我发现本教程很有帮助:medium.com/@rafaelvidaurre/…
-
这很有帮助。我可能会在某个时候用小提琴来更新我的具体问题,但我真正需要的是为我指明更多学习的方向。谢谢