Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node js wrap异步函数_Javascript_Node.js_Asynchronous - Fatal编程技术网

Javascript Node js wrap异步函数

Javascript Node js wrap异步函数,javascript,node.js,asynchronous,Javascript,Node.js,Asynchronous,我正在实现一个API,它有一个函数: get(url) 它返回一个响应对象,即没有回调。我发现的Http模块通过回调实现节点样式的异步函数。我尝试了几种方法等待异步函数返回,使用光纤等。光纤解决了光纤内的问题,但不能用于我的情况,因为我需要在任何光纤外返回值 可以包装整个执行过程(包括使用API的代码),但我真的不希望这样。是否有任何模块可以满足我的要求?如果我理解这个问题,您试图将异步代码与同步代码混合使用,如果没有承诺,您想要实现的目标实际上是不可能的。一旦将异步代码与同步代码混合,就会使

我正在实现一个API,它有一个函数:

get(url)
它返回一个响应对象,即没有回调。我发现的Http模块通过回调实现节点样式的异步函数。我尝试了几种方法等待异步函数返回,使用光纤等。光纤解决了光纤内的问题,但不能用于我的情况,因为我需要在任何光纤外返回值


可以包装整个执行过程(包括使用API的代码),但我真的不希望这样。是否有任何模块可以满足我的要求?

如果我理解这个问题,您试图将异步代码与同步代码混合使用,如果没有承诺,您想要实现的目标实际上是不可能的。一旦将异步代码与同步代码混合,就会使整个代码变为异步代码,否则同步代码将在返回同步代码的结果之前返回一个值

您可以尝试在函数上设置一个超时,使其在给定的时间段结束之前返回,这希望异步代码在同步代码返回之前执行并具有返回值。然而,这是非常低效的,并且不能消除这个问题,因为您仍然可以在异步部分完成之前返回


我也同意robertklep的评论,即node.js确实不适合您的用例,您最好为该作业寻找另一个工具。

您不能使用异步结果作为函数的返回值,而不是繁忙等待的hack。您的
get
API方法必须使用回调参数或返回承诺。我真的不能这样做,因为我正在实现一个API。现有代码期望此函数是同步的。你能详细介绍一下“忙等待黑客”吗?如果你被禁止使用异步工作流,为什么要使用Node?由于Im控制API的使用范围,我设法将其封装在光纤中,让它在API函数中运行和屈服。