如何按顺序运行两行Javascript-异步/承诺/回调

版2

我需要在香草javascript中依次运行两(或更多)行代码。

每个调用对例程的调用(又称顶层函数,其目的是执行程序步骤而不是计算结果)。这些依次称为其他多个。

function fMasterProcedure() {
    fSubProcedure1();
    fSubProcedure2();
    ... etc
}

假设fSubProcedure1()的代码如下(对于此示例):

function fSubProcedure1() {
    fSubSubProcedure1_1();  // Normal
    fSubSubProcedure1_2();  // Async
    fSubSubProcedure1_3();  // Normal
    fSubSubProcedure1_4();  // Async
    fSubSubProcedure1_5();  // Normal
}

从字面上看,这与这里的如何在javascript中运行序列函数是一个相同的问题,尽管那里提供的答案并未显示如何做到这一点,并且自那以来,与promise和异步函数有关的语法已经有所更新。

如今,答案似乎是promise和async / await ...还是只是不使用promise的回调?

我已经阅读了很多关于Promise的描述和教程,包括此处。

但是,我最终得到这样的代码:

function fMasterProcedure() {
    return (new Promise(function(resolve, reject) {
        fSubProcedure1();
        setTimeout(function () {
            resolve();
        }, 0);
    })).then(function(result) {
        fSubProcedure2();
    });
}

如您所见,它不必要地增加了400%的行,但仍无法可靠地运行。

有没有更有效的方式来编写此代码,或更合适的方式?

(要求是fSubProcedure2fSubProcedure1(及其所有子进程)完全完成之后运行。我正在尝试从“这不是JS的工作方式”转移到“这是使JS达到该要求的方式”。

我试图获得良好的理解,以便将其应用于整个项目方法-每个示例中都有许多示例。

灰色帽子

如果fSubProcedure1fSubProcedure2是两个异步函数,并且您想一个接一个地执行它们,则尝试执行以下操作:

async function fMasterProcedure() {
    await fSubProcedure1();
    await fSubProcedure2()
}
// to execute the fMasterProcedure function
fMasterProcedure().then(console.log).catch(console.error);
//replace console.log and console.error with your appropriate callbacks

范例:

// returns Promise<number>
function fSubProcedure1() {
    console.log("runs first");
    return Promise.resolve(2*2);
}
// returns void
function fSubProcedureNormal() {
    console.log("runs second");
    //returns nothing
}
// returns number which gets converted to Promise<number>
async function fSubProcedure2() { 
    console.log("runs third");
    return 2*4;
}
async function fMasterProcedure() {
    let a = await fSubProcedure1();
    fSubProcedureNormal();
    let b = await fSubProcedure2();
    return `${a} : ${b}`;
}

fMasterProcedure().then(console.log).catch(console.error);

重要一点...您想尝试捕获fMasterProcedure每个内部错误await

资源:

异步功能

异步等待

查看这些资源以了解更多信息

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章