承诺获取和处理数组



我对这两个承诺都是新手,很难理解我需要做什么来编码以下逻辑:

我正在Node.js和Express中开发一个Web服务,从wiki中获取歌曲数据并返回一个对象,客户端应用程序将使用该对象。维基的API不允许我编写批处理查询;我必须单独获取每一页。所以我必须得到歌曲列表,然后为每首歌打电话。

我目前打算使用Node.js的Q中间件作为我的promise库,尽管我愿意接受关于更适合此任务的中间件的建议。

这是我的伪代码:

app.get('/songs/:criteria', function(request,response) {
    downloadSongList()
    .then(foreach(song) downloadSongData)
    .then(assembleReturnValue)
    .then(response.json(returnValue));
});

实际的代码会是什么样子?

实际的代码将使用函数表达式,并且在foreach周围需要使用Q.all:

app.get('/songs/:criteria', function(request,response) {
    downloadSongList(request.params)
    .then(function(list) {
        var promises = list.map(function(song) {
            return downloadSongData(song.params) // another promise
        });
        return Q.all(promises);
    }).then(function(allResults) {
        // assemble
        return // Value;
    }).then(response.json);
});

还可以看看这些关于promise开发的一般规则。

这是Bluebird的另一个解决方案,因为您说过您对不同的库感兴趣:

  downloadSongList(request.params).
                 map(downloadSongData).
                 call("join",",").
                 then(response.json).catch(sendError)

我们在这里使用的:

  • .map-它接受一个promise数组,并在每个promise上调用一个方法,我们对downloadSongList返回的列表执行此操作
  • 调用数组方法的.call,在这里我们将元素连接为字符串,不确定您在这里使用的是什么格式,但这基本上可以实现array.join

这些是我们从蓝鸟身上获得的一些优势,除了这与Bergi的回答非常相似。

相关内容

  • 没有找到相关文章

最新更新