Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 你能在承诺后面加上一个.then吗';是什么创造的?_Javascript_Es6 Promise - Fatal编程技术网

Javascript 你能在承诺后面加上一个.then吗';是什么创造的?

Javascript 你能在承诺后面加上一个.then吗';是什么创造的?,javascript,es6-promise,Javascript,Es6 Promise,承诺只是让我困惑 我正在尝试制作一个模拟数据服务来模仿axios 我的mockput调用将targetUrl传递给\u fetch,然后查看它是否为有效url,并返回一个带有延迟.resolve的新承诺 const _returnResponse = (mockData, time = 0) => new Promise((resolve) => { setTimeout(() => { resolve(mockData); }, time);

承诺只是让我困惑

我正在尝试制作一个模拟数据服务来模仿axios

我的mock
put
调用将targetUrl传递给
\u fetch
,然后查看它是否为有效url,并返回一个带有延迟.resolve的新承诺

const _returnResponse = (mockData, time = 0) => new Promise((resolve) => {
    setTimeout(() => {
        resolve(mockData);
    }, time);
});
或者一个新的承诺被延迟。拒绝

const _returnError = (time = simulatedDelay) => {
    const returnValue = new Promise(((resolve, reject) => {
        setTimeout(() => {
            reject(new Error('error'));
        }, time);
    }));
    return returnValue;
};
但是当我进行mock
put
调用时,它会返回一个mock数据,调用方法将其解释为成功,控制台会在其

    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;
            });
    },

我觉得我完全错过了一些东西,我已经研究了几个小时,但仍然没有得到它。

作为对这个问题的直接回答:是的,你可以在承诺创建后添加.then()

例如:

const hi = new Promise((resolve, reject) => {
  setTimeout(() => resolve('hello'), 2000);
});

hi.then(result => console.log(result));
至于让您感到困惑的承诺,我建议(除了更多阅读之外)在IDE中使用setTimeout进行大量的操作。我知道你已经在你的模拟中使用了setTimeout,但是把它去掉,在它自己的文件中运行代码,这样你就可以控制整个环境了。有很多console.log('blah')来查看订单等等。还要确保您同样熟悉回调,因为承诺只是回调的语法糖。同时尝试阅读JS事件循环——如果您知道如何以及何时执行回调/承诺,它可能会提供一些上下文

请注意,您甚至可以在回调解析或拒绝后添加.then()。因此术语“promise”-它字面上是一个承诺,您的.then()函数将运行


作为对问题的直接回答:是的,您可以在承诺创建后将.then()添加到承诺中

例如:

const hi = new Promise((resolve, reject) => {
  setTimeout(() => resolve('hello'), 2000);
});

hi.then(result => console.log(result));
至于让您感到困惑的承诺,我建议(除了更多阅读之外)在IDE中使用setTimeout进行大量的操作。我知道你已经在你的模拟中使用了setTimeout,但是把它去掉,在它自己的文件中运行代码,这样你就可以控制整个环境了。有很多console.log('blah')来查看订单等等。还要确保您同样熟悉回调,因为承诺只是回调的语法糖。同时尝试阅读JS事件循环——如果您知道如何以及何时执行回调/承诺,它可能会提供一些上下文

请注意,您甚至可以在回调解析或拒绝后添加.then()。因此术语“promise”-它字面上是一个承诺,您的.then()函数将运行


在理解代码时遇到一些困难。可能值得将一个独立的代码放入JSFIDLE或类似的代码服务中。否则,如果您可以访问ES7/babel,您最好使用带有
async
await
关键字的异步函数,这使异步编程变得更容易和简单。我不确定如何处理确切的问题——但关于您的评论“承诺让我困惑”,我发现这个教程很有帮助:非常有帮助。我可能会在某个时候更新我的具体问题,但我真正需要的是为我指明更多学习的方向。感谢您在理解代码时遇到一些困难。可能值得将一个独立的代码放入JSFIDLE或类似的代码服务中。否则,如果您可以访问ES7/babel,您最好使用带有
async
await
关键字的异步函数,这使异步编程变得更容易和简单。我不确定如何处理确切的问题——但关于您的评论“承诺让我困惑”,我发现这个教程很有帮助:非常有帮助。我可能会在某个时候更新我的具体问题,但我真正需要的是为我指明更多学习的方向。谢谢你,非常感谢你,詹姆斯。我会花一些时间研究这些主题,然后按照你的建议简化它。我遇到的问题是在线资源用完了,仍然无法理解它们。非常感谢你,詹姆斯。我会花一些时间研究这些主题,然后按照你的建议简化它。我遇到的问题是在线资源不足,仍然无法理解它们。