这个代码中传播函数的目的是什么?

我想弄清楚如何使用mysql-promise。 https://www.npmjs.com/package/mysql-promise

这里是一些示例代码;

var db = require('mysql-promise')(); db.configure({ "host": "localhost", "user": "foo", "password": "bar", "database": "db" }); db.query('UPDATE foo SET key = ?', ['value']).then(function () { return db.query('SELECT * FROM foo'); }).spread(function (rows) { //what's purpose of spread()? console.log('Loook at all the foo', rows); }); 

传播函数的目的是什么? 它究竟做了什么?

Jaromanda X是正确的,这个例子歪曲了spread

传播的理想用例是当你的callback/链接函数需要多个参数,但是一个promise会返回一个单一的值(我们的工作是确保它是由链接函数使用的格式的参数数组),所以:

 Promise.resolve([1,2,3]).spread(function(a, b, c){ ... 

相当于(在ES6中):

 Promise.resolve([1,2,3]).then( ([a, b, c]) => { ... 

传播函数来自mysql-promise库附带的Bluebird promise库。 它解开了一个承诺,必须返回一个数组,并将该数组的每个元素传递给它的函数,在这种情况下,从MySQL数据库的行。

从github上的mysql-promise的package.json:

  "dependencies": { "bluebird": "^2.10.2", "mysql": "^2.10.2" }, 

以下是蓝鸟项目的更多信息: http : //bluebirdjs.com/docs/api/spread.html

.spread是一个Bluebird(`mysql-promise正在使用的promise函数)函数。

基本上, .spread允许你处理一个数组的promise的返回值,而不是一个单一的值。

有关更多信息,请参阅http://bluebirdjs.com/docs/api/spread.html