对于promise.then()中的循环?

时间:2016-07-25 16:15:17

标签: node.js ecmascript-6 es6-promise

我需要在两个值之间进行迭代,并在每次迭代时创建/触摸文件(I / O)。

我使用fs-promise模块异步执行此操作:

const path = require('path');
const fsp = require('fs-promise');


function addPages(startAt, pages, mode) {
    let htmlExt = mode.HTML;
    let cssExt = mode.CSS;

    fsp.readFile(path.join('.', 'templates', 'body.html'), { encoding: 'utf-8' })
        .then((content) => {
            // return Promise.all(() => {}).then().catch(); // Do this.

            for (let i = startAt, endAt = startAt + pages; i < endAt; i++) {
                console.log(i);

                fsp.writeFile(path.join('.', 'manuscript', `page-${i}`, `style.${cssExt}`), '')
                    .then(() => { console.log('Yay!') })
                    .catch(console.log.bind(console));

                // fsp.writeFile(path.join('.', 'manuscript', `page-${i}`, `style.${cssExt}`), '')
                //     .then((i, templateHTML) => {
                //         fsp.writeFile(path.join('.', 'manuscript', `page-${i}`, `body.${htmlExt}`), content);
                //     })
                //     .catch((err) => {
                //         console.log.bind(console);
                //     });

            }

        })
        .catch((err) => {
            if (err) return error('Couldn\'t create pages', err);
        });

现在我做read Promises.all([Array of promises])是在then()范围内循环的方法,但问题是为什么/如何?

我无法理解为什么在上下文移出承诺的then()范围之前for-loop没有执行,然后我应该如何达到预期的结果。

1 个答案:

答案 0 :(得分:1)

.catch()

正如评论中所阐述的那样,抵制将无功能android-support-v4.jar处理程序引入您的承诺链的诱惑。

在这种情况下,非功能性意味着:它无法从错误中恢复,而不会重新抛出错误。一个不抛出的catch处理程序将错误标记为已处理,即它返回已解析的promise,而不是被拒绝的promise。这使得以后在promise链中的正确错误处理变得不可能。这是一种不好的做法,没有任何帮助。

如果要记录错误,请记录并重新抛出。如果您已从错误中完全恢复并且后续代码不受阻碍,请不要重新抛出。