【问题标题】:How to return only one result when making a double await Node.js进行双重等待Node.js时如何仅返回一个结果
【发布时间】:2022-01-07 21:53:48
【问题描述】:

您好,我无法找到级联函数问题的解决方案,

服务 A

print(await serviceB.methodA(myParameter));

服务 B

async methodA(MyParameter){

            return await methodB(MyParamter).then((value) =>{
                serviceA.methodC(value);
               }

            
         );
    }

所以输出是

undefined
result 

我怎么能等到第二个结果呢??因为当变得未定义时会破坏我的服务A

【问题讨论】:

  • 您在第一次then 回调中没有返回承诺。在serviceA.methodC(......之前添加return
  • 你应该在回调中返回Promisereturn serviceA.methodC
  • 您不应该将await 与承诺链foo().then().then() 混合使用,选择一种您更喜欢的方法并坚持下去...
  • @trincot 我编辑了这个问题,因为经过几个小时的尝试解决它我做的一团糟,这是我首先尝试的方式,所以问题是如何避免第一个结果。
  • return 仍然不见了...

标签: javascript node.js asynchronous async-await


【解决方案1】:

使用您的代码结构,您需要返回内部承诺。

改变这个:

async methodA(MyParameter){
    return await methodB(MyParamter).then((value) =>{
        serviceA.methodC(value);
    });
}

对此:

async methodA(MyParameter){
    return methodB(MyParamter).then((value) =>{
        return serviceA.methodC(value);
    });
}

.then() 的结果成为承诺链的解析值。由于您没有从 .then() 处理程序返回任何内容,因此解析的值变为 undefined


但是,由于您使用的是async/await,因此通常最好不要在同一代码中混合.then(),因此我建议您更改为:

async methodA(MyParameter){
    let value = await methodB(MyParamter);
    return serviceA.methodC(value);
}

【讨论】:

    猜你喜欢
    • 2012-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-02
    • 2019-06-22
    • 1970-01-01
    相关资源
    最近更新 更多