Node.js 使用多个回调的正确方法

标签 node.js callback

我是 Node.js 的新手,很抱歉。

在我的代码中,我正在使用某些服务的 API。基本上就是很多回调。这些回调提供了我需要在另一个回调中使用的服务值。

如果是同步方式那么我会写如下:

var value1 = 10;
var value2 = 0;
var value3 = '';
var value4 = '';

api.method1((error, data) => {
    if (error) {
        // some code
    }

    value2 = data.value1FromApi / value1;    
});

if (value2 > 0) {
    api.method2(value2, value1, (error, response) => {
        if (error) {
            // some code
        }

        value3 = response.value2FromApi;
        value4 = response.value3FromApi;
    });

    // Check status
    for (var i = 0; i < 10; i++) {
        if (value4 !== 'some status') {
            api.method3(value3, (error, response) => {
                value4 = response.value4FromApi;
            });

            // wait(1000);
        }
        else {
            break;
        }
    }

    if (value4 !== 'some status') {
        api.method4(value3, (error, response) => {

        });
    }
    else {
        // similar code as above
    }
}

我知道这是错误的代码,因为第一次回调后value2将是未定义

告诉我需要应用什么技术或哪些技巧来解决该回调序列?

最佳答案

您需要以异步方式处理此问题。你可以试试这个:

api.method1((error, data) => {
    if (error) {
        // some code
    }

    value2 = data.value1FromApi / value1;
    if (value2 > 0) {
        api.method2(value2, value1, (error, response) => {
            if (error) {
                // some code
            }

            value3 = response.value2FromApi;
            value4 = response.value3FromApi;
            // Check status
            for (var i = 0; i < 10; i++) {
                if (value4 !== 'some status') {
                    api.method3(value3, (error, response) => {
                        value4 = response.value4FromApi;
                        if (value4 !== 'some status') {
                                    api.method4(value3, (error, response) => {

                                    });
                                }
                        else {
                            // similar code as above
                        }
                    });
                }
                else {
                    break;
                }
            }

        });
    }
});

基本上所有回调都必须相互嵌套

关于Node.js 使用多个回调的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49376640/

相关文章:

javascript - Vuejs 上的回调函数

javascript - 安装后找不到 Node 私有(private)模块

JavaScript 异步函数

node.js - 错误 : cookieParser ("secret") required for signed cookies

javascript - 这是使用 nodejs 的好场景吗?

Javascript:在嵌套函数中返回 promise

android - 什么是 Android 上的 Binder 回调?

node.js - 处理回调函数中引发的错误的正确方法是什么?

javascript - PM2:如何重置pm2无用的id?

javascript - 使nodejs函数对一个用户来说是连续的