node.js - Bluebird promise - 每个功能

标签 node.js promise sails.js bluebird

提前感谢您的帮助。

在使用 Bluebird Promise 时,我运行了一系列 Promise。在最后一个 promise 期间,我想为数组中的每个对象多次运行一个函数。

下面是伪代码:

var userArray = [ 
    {
        name: "John",
        email: "John@email.com"

    },
    {
        name: "Jane",
        email: "jane@email.com"
    }]; 

var functionOne = function() {
    //returns Promsie object
};

var functionTwo = function() {
    //returns promise object
};

var createUser = function(user) {
    return User.findOrCreate({email: user.email},{
        name: user.name,
        email: user.email
    });
};

functionOne()
    .then(functionTwo)
    .each(createUser(userArray))
    .then(function onComplete() {
        console.log("Complete");
    })
    .catch(function onError() {
        console.log("Um...it's not working");
    });

我知道我没有正确使用每个功能。使用 Bluebird 实现这一点的正确方法是什么?

最佳答案

据我了解,您希望对数组中的元素采取一些异步操作。然后请检查以下示例:

var Promise = require('bluebird');

function createUsersFromArray(userArray){
    return Promise.each(userArray, function(signleUser){
        return createUserFunction(signleUser);
    });
}

return Promise.each(userArray, createUserFunction);

functionOne()
  .then(functionTwo)
  .then(function(){
      return createUsersFromArray(userArray);
  })
//or just .then(createUsersFromArray) if functionTwo return this array
  .then(function(createdUsers){
      //here you may retrieve users and make some magic with them
      console.log(createdUsers);
  })
  .then(function onComplete() {
      console.log("Complete");
  })
  .catch(function onError() {
      console.log("Um...it's not working");
  });

我还建议使用“all”而不是“each”

查看以下示例:

return Promise.all(userArray.map(function(singleUser){
    return doSomethingWithUser(singleUser);
}));

return Promise.all(userArray.map(doSomethingWithUser));

如果所有操作都正确执行,'all' 会通知您。

如何使用 promise (最佳实践):

http://pouchdb.com/2015/05/18/we-have-a-problem-with-promises.html https://blog.domenic.me/youre-missing-the-point-of-promises/

关于node.js - Bluebird promise - 每个功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31746650/

相关文章:

node.js - 如何在mongodb聚合中将动态值传递给$in

javascript - Meteor 应用程序中 PayPal 的 IPN 监听器

javascript - 我将如何创建一个简单的 socket.IO 聊天?

javascript - 为什么我不能将其放入 Promise.catch 处理程序中?

javascript - promise 解决无效

javascript - 使用 jQuery 返回 AJAX promise 的结果

mysql - 将日期作为字符串存储在 mysql 中是否安全?

javascript - 将 sails.js 变量发送到 Javascript 文件

Node.js 多平台项目结构

javascript - 为什么sencha ajax请求不发送/存储服务器给定的 session cookie(sails)