Javascript 获取和处理数组的承诺
我对这两个承诺都不熟悉,并且很难理解我需要做什么来编码以下逻辑: 我正在Node.js和Express中开发一个Web服务,从wiki获取歌曲数据并返回一个对象,客户端应用程序将使用该对象。wiki的API不允许我编写批处理查询;我必须把每一页都单独拿出来。因此,我必须获得歌曲列表,然后为每首歌曲执行调用 我目前打算使用Q中间件for Node.js作为我的Promissions库,尽管我愿意接受关于更适合此任务的中间件的建议 这是我的伪代码:Javascript 获取和处理数组的承诺,javascript,node.js,promise,q,Javascript,Node.js,Promise,Q,我对这两个承诺都不熟悉,并且很难理解我需要做什么来编码以下逻辑: 我正在Node.js和Express中开发一个Web服务,从wiki获取歌曲数据并返回一个对象,客户端应用程序将使用该对象。wiki的API不允许我编写批处理查询;我必须把每一页都单独拿出来。因此,我必须获得歌曲列表,然后为每首歌曲执行调用 我目前打算使用Q中间件for Node.js作为我的Promissions库,尽管我愿意接受关于更适合此任务的中间件的建议 这是我的伪代码: app.get('/songs/:criteria
app.get('/songs/:criteria', function(request,response) {
downloadSongList()
.then(foreach(song) downloadSongData)
.then(assembleReturnValue)
.then(response.json(returnValue));
});
实际代码是什么样子的?实际代码将使用函数表达式,在
foreach
周围,您需要使用:
还可以查看promise开发。实际代码将使用函数表达式,在
foreach
周围,您需要使用:
还可以查看promise开发。实际代码将使用函数表达式,在
foreach
周围,您需要使用:
还可以查看promise开发。实际代码将使用函数表达式,在
foreach
周围,您需要使用:
还可以看看promise development。这里是Bluebird的替代解决方案,因为您说过您对不同的库感兴趣:
downloadSongList(request.params).
map(downloadSongData).
call("join",",").
then(response.json).catch(sendError)
我们在这里利用的是:
-它接受一个承诺数组,并对每个承诺调用一个方法,我们对从.map
返回的列表执行此操作下载歌曲列表
调用数组方法,这里我们将元素作为字符串进行连接,不确定您在这里使用的是什么格式,但这基本上可以执行.call
李>array.join
这些是我们从Bluebird获得的一些优势,不同的是这与Bergi的答案非常相似。这里是Bluebird的替代解决方案,因为您说您对不同的库感兴趣:
downloadSongList(request.params).
map(downloadSongData).
call("join",",").
then(response.json).catch(sendError)
我们在这里利用的是:
-它接受一个承诺数组,并对每个承诺调用一个方法,我们对从.map
返回的列表执行此操作下载歌曲列表
调用数组方法,这里我们将元素作为字符串进行连接,不确定您在这里使用的是什么格式,但这基本上可以执行.call
李>array.join
这些是我们从Bluebird获得的一些优势,不同的是这与Bergi的答案非常相似。这里是Bluebird的替代解决方案,因为您说您对不同的库感兴趣:
downloadSongList(request.params).
map(downloadSongData).
call("join",",").
then(response.json).catch(sendError)
我们在这里利用的是:
-它接受一个承诺数组,并对每个承诺调用一个方法,我们对从.map
返回的列表执行此操作下载歌曲列表
调用数组方法,这里我们将元素作为字符串进行连接,不确定您在这里使用的是什么格式,但这基本上可以执行.call
李>array.join
这些是我们从Bluebird获得的一些优势,不同的是这与Bergi的答案非常相似。这里是Bluebird的替代解决方案,因为您说您对不同的库感兴趣:
downloadSongList(request.params).
map(downloadSongData).
call("join",",").
then(response.json).catch(sendError)
我们在这里利用的是:
-它接受一个承诺数组,并对每个承诺调用一个方法,我们对从.map
返回的列表执行此操作下载歌曲列表
调用数组方法,这里我们将元素作为字符串进行连接,不确定您在这里使用的是什么格式,但这基本上可以执行.call
李>array.join
这些是我们从蓝鸟身上获得的一些优势,不同的是,这与Bergi的答案非常相似。在这里用.catch()捕捉错误的位置是什么?取决于您想要捕捉什么错误以及您是否计划从中恢复,但通常最终都会捕捉到所有错误。我接受这个答案还为时过早,因为它不能正常工作。服务器不会在响应中返回JSON,而是坐在最后一步直到超时。我尝试在链的末尾添加.done();这不起作用。在末尾添加另一个
.catch(console.log)
以查看失败的内容。我猜想.json()
确实需要作为方法调用,请尝试。然后(response.json.bind(response))
或函数表达式。如果这不是问题所在,那么您可能仍然应该接受这个答案,以及将当前实际代码发布到哪里。一个.catch()适合在哪里捕获错误?取决于您希望捕获的错误以及您是否计划从中恢复,但通常最终会捕获所有错误。我接受这个答案还为时过早,因为它不能正常工作。服务器不会在响应中返回JSON,而是坐在最后一步直到超时。我尝试在链的末尾添加.done();这不起作用。在末尾添加另一个.catch(console.log)
以查看失败的内容。我猜想.json()
确实需要作为方法调用,请尝试。然后(response.json.bind(response))
或函数表达式。如果这不是问题所在,那么您可能仍然应该接受这个答案,以及将当前实际代码发布到哪里。一个.catch()适合在哪里捕获错误?取决于您希望捕获的错误以及您是否计划从中恢复,但通常最终会捕获所有错误。我接受这个答案还为时过早,因为它不能正常工作。服务器不会在响应中返回JSON,而是坐在最后一步直到超时。我尝试在链的末尾添加.done();这不起作用。在末尾添加另一个.catch(console.log)
以查看失败的内容。我猜是