Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了在Node.js中等待多个回调的惯用方法大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
假设你需要做一些依赖于一些临时文件的操作。以来
我们在这里谈论Node,这些操作显然是异步的。
等待所有操作完成的习惯方式是什么
知道什么时候temp文件可以删除

这里是一些代码显示我想做什么:

do_something(tmp_file_name,function(err) {});
do_something_other(tmp_file_name,function(err) {});
fS.Unlink(tmp_file_name);

但是如果我这样写,第三个调用可以在前两个之前执行
有机会使用该文件。我需要一些方法来保证前两个
调用已经完成(调用它们的回调),然后继续移动而不嵌套
调用(并使它们在实践中同步)。

我想到使用事件发射器在回调和注册一个计数器
作为接收器。计数器将接收完成的事件并计数多少
操作仍在等待。当最后一个完成,它会删除
文件。但有一个竞争条件的风险,我不知道这是
通常这个东西是怎么做的。

Node人如何解决这种问题?

解决方法

更新:

现在我建议看看:

> Promises

@H_301_43@

The Promise object is used for deferred and asynchronous computations.
A Promise represents an operation that hasn’t completed yet,but is
expected in the future.

一个流行的承诺图书馆是bluebird.一个建议看看why promises

@H_301_43@

You should use promises to turn this:

06000

Into this:

06001

>发电机:例如通过co

@H_301_43@

Generator based control flow goodness for nodejs and the browser,
using promises,letTing you write non-blocking code in a nice-ish way.

06002

如果我理解正确我想你应该看看非常好的async图书馆。你应该特别看看series.只是从github页面代码片段的副本:

async.series([
    function(callBACk){
        // do some stuff ...
        callBACk(null,'one');
    },function(callBACk){
        // do some more stuff ...
        callBACk(null,'two');
    },],// optional callBACk
function(err,results){
    // results is Now equal to ['one','two']
});


// an example using an object instead of an array
async.series({
    one: function(callBACk){
        setTimeout(function(){
            callBACk(null,1);
        },200);
    },two: function(callBACk){
        setTimeout(function(){
            callBACk(null,2);
        },100);
    },},function(err,results) {
    // results is Now equals to: {one: 1,two: 2}
});

作为加号,这个库也可以在浏览器中运行。

大佬总结

以上是大佬教程为你收集整理的在Node.js中等待多个回调的惯用方法全部内容,希望文章能够帮你解决在Node.js中等待多个回调的惯用方法所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。