【问题标题】:How I serialize a blockchain without using Async/await?如何在不使用 Async/await 的情况下序列化区块链?
【发布时间】:2018-09-14 23:23:51
【问题描述】:

我正在尝试序列化mysql驱动的连接功能。但是当我运行我的函数时,nodejs 进行异步调用,我无法检索结果的正确值。 如何在序列化中运行 connection.connect?我不能使用 async/await 来解决这个问题,因为函数的结果会变成一个 Promise。

function a(){

	var result = "false";
	
	connection = dbConnection.getConnection();
	console.log("test1");
	
	connection.connect(function (err) {
		console.log("test2");
		result = "true";
	});

	console.log("end of function");
	return result;
}

console.log(a());

日志:

测试1

函数结束

测试2

【问题讨论】:

  • 要使用async/await,你会希望你的函数返回一个promise。
  • 您唯一能做的就是学习如何编写异步代码。要么学习如何正确使用回调,或者如何使用 Promise,或者如何使用 async/await。任何其他你想做的方式都是不可能的。
  • 不幸的是,如果没有异步性,就无法解决这个问题。好消息是异步并不难实现。

标签: javascript node.js


【解决方案1】:
function a() {
  return new Promise((resolve, reject) => {
    const connection = dbConnection.getConnection();

    connection.connect(function (err) {
      if (err) {
        reject();
      } else {
        resolve();
      }
    });
  });
}

async function isConnected() {
  let hasConnection = false;
  try {
    const connected = await a();
    hasConnection = true;
  } catch (err) {
    console.log('You are not connected');
  }

  return hasConnection;
}

isConnected();

【讨论】:

  • 这行不通。在async 之外使用await 是语法错误
  • 为什么同时使用解析/拒绝和布尔标志?这是多余的。 connected 常量是无用的,因为它永远不会是假的。
  • @slebetman 对,您必须将 await 放在函数范围内。将修复
  • @Danilinn 为什么你不能使用承诺?
  • 在我的应用程序中,我的函数的结果不能是一个承诺,它必须是纯结果
猜你喜欢
  • 2019-12-04
  • 2018-12-04
  • 2022-11-15
  • 2022-08-06
  • 2017-09-08
  • 2019-09-14
  • 2019-10-24
  • 2018-07-15
  • 1970-01-01
相关资源
最近更新 更多