Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.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 获取和处理数组的承诺_Javascript_Node.js_Promise_Q - Fatal编程技术网

Javascript 获取和处理数组的承诺

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

我对这两个承诺都不熟悉,并且很难理解我需要做什么来编码以下逻辑:

我正在Node.js和Express中开发一个Web服务,从wiki获取歌曲数据并返回一个对象,客户端应用程序将使用该对象。wiki的API不允许我编写批处理查询;我必须把每一页都单独拿出来。因此,我必须获得歌曲列表,然后为每首歌曲执行调用

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

这是我的伪代码:

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)
以查看失败的内容。我猜是