繁体   English   中英

回调函数节点js的回调

[英]callback of the callback function node js

因此,在Node中,我们使用了异步功能。 为此,我们使用回调函数作为参数。 但是如何执行最终功能,之后才想终止代码? 只是通过空函数? 例子如下:

fs.mkdir('stuff', function(){
    fs.readFile('readMe.txt', 'utf8', function(err, data) {
        fs.writeFile('./stuff/writeMe.txt', data);
    });
});

mkdir具有回调功能-一切都很好

readFile具有回调功能-一切都很好

writeFile具有NOT回调函数,因为那是我要做的最后一件事,但是随后在控制台中出现错误:“ DeprecationWarning:不建议使用不带回调的异步函数。”

我应该每次这样做时,都将一个空函数作为回调传递以避免发生错误吗? 最佳做法是什么?

我应该每次这样做时,都将一个空函数作为回调传递以避免发生错误吗?

没有。

最佳做法是什么?

传递函数并处理其报告的任何错误。 您还需要处理来自mkdirreadFile错误,当前您正在忽略这些错误。

例如:

fs.mkdir('stuff', function(err) {
    if (err) {
        // Do something with the fact mkdir failed
    } else {
        fs.readFile('readMe.txt', 'utf8', function(err, data) {
            if (err) {
                // Do something with the fact readFile failed
            } else {
                fs.writeFile('./stuff/writeMe.txt', data, function(err) {
                    if (err) {
                        // Do something with the fact writeFile failed
                    }
                });
            }
        });
    }
});

...这是回调地狱的一个很好的例子,这是使用promise的动机的一部分。 您可以使fs API(使用诸如promisify之类的多个库中的任何一个) promisify并执行以下操作:

fsp.mkdir('stuff')
.then(() => fsp.readFile('readMe.txt', 'utf8'))
.then(data => fsp.writeFile('./stuff/writeMe.txt', data))
.catch(err => {
    // Do something with the fact something failed
});

...其中fsp是承诺的fs API的占位符。

在Node 8.x +中,您可以使用async / await来使用那些已承诺的API编写看起来类似的代码:

// This must be inside an `async` function
try {
    fsp.mkdir('stuff');
    const data = await fsp.readFile('readMe.txt', 'utf8');
    await fsp.writeFile('./stuff/writeMe.txt', data);
} catch (err) {
    // Do something with the fact something failed
}

您可以改用writeFileSync。

fs.mkdir('stuff', function(){
    fs.readFile('readMe.txt', 'utf8', function(err, data) {
        fs.writeFileSync('./stuff/writeMe.txt', data);
    });
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM