首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bluebird promises -每个函数

Bluebird promises -每个函数
EN

Stack Overflow用户
提问于 2015-07-31 20:50:32
回答 3查看 14.5K关注 0票数 9

提前感谢你的帮助。

在使用Bluebird promises时,我有一系列的promises在运行。在最后的承诺中,我希望为数组中的每个对象多次运行一个函数。

下面是伪代码:

代码语言:javascript
复制
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");
    });

我知道我没有正确使用each函数。使用Bluebird实现这一点的正确方法是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-08-02 02:53:14

感谢@Roman @Yuri的帮助!我现在可以工作的代码如下:

代码语言:javascript
复制
var userArray = [ 
{
    name: "John",
    email: "John@email.com"

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

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

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

var createUser = function(singleUser) {
  //returns Promise object containing creating User
};

functionOne()
    .then(functionTwo)
    .then(function() {
      return Promise.map(userArray, createUser);
    })
    .then(function onComplete(response) {
        console.log("Complete:" + JSON.stringify(response));
    })
    .catch(function onError() {
        console.log("Um...it's not working");
    });
票数 2
EN

Stack Overflow用户

发布于 2015-07-31 21:46:10

据我所知,您希望对数组中的元素执行一些异步操作。请查看以下示例:

代码语言:javascript
复制
var Promise = require('bluebird');

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

代码语言:javascript
复制
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”

请查看以下示例:

代码语言:javascript
复制
return Promise.all(userArray.map(function(singleUser){
    return doSomethingWithUser(singleUser);
}));

代码语言:javascript
复制
return Promise.all(userArray.map(doSomethingWithUser));

“all”将通知您是否正确执行了所有操作。

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

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

票数 14
EN

Stack Overflow用户

发布于 2015-08-01 02:40:33

最简单的实现:

代码语言:javascript
复制
functionOne()
    .then(functionTwo)
    .then(function(){
      return bluebird.each(userArray, createUser);
    })
    .then(function onComplete() {
        console.log("Complete");
    })
    .catch(function onError() {
        console.log("Um...it's not working");
    });

如果您想要访问所有这些创建的结果,则应该使用.map而不是.each。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31746650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档