这个代码中传播函数的目的是什么?
我想弄清楚如何使用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 。