Promisify一个JavaScript回调函数

Promisify一个JavaScript回调函数,javascript,asynchronous,callback,Javascript,Asynchronous,Callback,我一直在阅读有关async/Wait和Promissions的所有资料,但我无法让它正常工作。我不断得到“承诺”,当它实现时,我收到“未定义” 我想我已经花了大约两天的时间在这上面了!我不知道怎么了。这是未承诺的版本 const getCoords = (address) => { geocoder.addressSearch(address, (result) => { return result; } ); }; 下面是我对承

我一直在阅读有关async/Wait和Promissions的所有资料,但我无法让它正常工作。我不断得到“承诺”,当它实现时,我收到“未定义”

我想我已经花了大约两天的时间在这上面了!我不知道怎么了。这是未承诺的版本

  const getCoords = (address) => {
    geocoder.addressSearch(address, (result) => {
        return result;
      }
    );
  };
下面是我对承诺代码的尝试:

  const getCoords = async (address) => {
     await geocoder.addressSearch(address, async (result) => {
        return result;
  }
);
})


我只是想返回结果。如果有人能把我引向正确的方向,我将不胜感激。

你的两个例子都是错误的

使用连续传球方式

在这种风格中,延续(“回调”)忽略任何
返回值,因为此函数从主调用异步运行-

const地理编码器=
{addressSearch:(地址,回调)=>
设置超时(回调,1000{
coords:[12.345,67.890]
})
}
const getCoords=(地址,回调)=>
地址搜索(地址,结果=>
回调(result.coords)
)
getCoords(“foobar”,console.log)

//[12.345,67.89]
你的两个例子都不正确

使用连续传球方式

在这种风格中,延续(“回调”)忽略任何
返回值,因为此函数从主调用异步运行-

const地理编码器=
{addressSearch:(地址,回调)=>
设置超时(回调,1000{
coords:[12.345,67.890]
})
}
const getCoords=(地址,回调)=>
地址搜索(地址,结果=>
回调(result.coords)
)
getCoords(“foobar”,console.log)

//[12.345,67.89]
您的承诺代码是什么样子的?我刚刚更新了问题。你能帮忙吗?你的承诺代码是什么样子的?我刚刚更新了这个问题。你能帮忙吗?哇,这篇文章写得很透彻也很好。我唯一的问题是我以前对geocoder的定义是这样的:const geocoder=new kakao.maps.services.geocoder();所以我对你答案的第一行有意见。您对此有什么建议吗?我在示例中使用了
geocoder
的一个“假”实现,这样我们可以看到它们是如何工作的,并且可以在您自己的浏览器中在站点上进行测试。如果
kakao.maps.services.Geocoder
是以连续传递样式编写的,那么您将像第一个示例中那样编写
getCoords
。如果
Geocoder
提供了一个基于承诺的API,您将像我们在第二个示例中所做的那样编写
getCoords
。注意,如果它是使用回调样式编写的,那么它很可能遵循节点的。有关如何与
async
wait
一起使用的更多说明和示例,请参阅。如果你在那之后被卡住了,请将文档链接到你正在使用的库中,我会尝试查看它。哇,这篇文章写得非常透彻和出色。我唯一的问题是我以前对geocoder的定义是这样的:const geocoder=new kakao.maps.services.geocoder();所以我对你答案的第一行有意见。您对此有什么建议吗?我在示例中使用了
geocoder
的一个“假”实现,这样我们可以看到它们是如何工作的,并且可以在您自己的浏览器中在站点上进行测试。如果
kakao.maps.services.Geocoder
是以连续传递样式编写的,那么您将像第一个示例中那样编写
getCoords
。如果
Geocoder
提供了一个基于承诺的API,您将像我们在第二个示例中所做的那样编写
getCoords
。注意,如果它是使用回调样式编写的,那么它很可能遵循节点的。有关如何与
async
wait
一起使用的更多说明和示例,请参阅。如果你在那之后被卡住了,请将文档链接到你正在使用的库中,我将尝试查看它。