javascript - 正确链接 Promise

标签 javascript node.js promise

我想在一个循环中按顺序绑定(bind) promise 。我需要这个用户帐户,其中一个操作的结果取决于另一个。 我正在尝试编写一个平面版本 - 所有代码都在一个地方,使用绑定(bind)。这至少是我想要的。我围绕两个创建方法包装了 promises,如下所示:

function create(myApi, record) {
    return new Promise(function (resolve, reject) {
            myApi.create(record, function (err, result) {
                    if (err) reject(err);
                    else resolve(result);
            });
    });
}

function createUser(myApi, record) {
    return new Promise(function (resolve, reject) {
            myApi.createUser(record, function (err, result) {
                    if (err) reject(err);
                    else resolve(result);
            });
    });
}

现在,我想在一个循环中创建用户:

for ( var i = 0; i < dummyData.accounts.length; i++) {
  var cursorUser = dummyData.accounts[i];
  var auth0User = {
    email: cursorUser.email,
    password: cursorUser.password,
    connection: 'Username-Password-Authentication'
  };
  createUser(api, auth0User)
    .then( function(auth0Info) {
      console.log("Auth0 userInfo: ", auth0Info);
      cursorUser.authProfile = auth0Info;
      create(accountsAPIService, cursorUser)
        .then(function (account) {
          console.log("created account:", account);
        })
        .catch(function (err) {
          console.log('count not create account for user, error: ', err, '\nfor: ', auth0User);
        });
  })
  .catch(function (err) {
    console.log('could not create auth0 user, error: ', err, '\nfor: ', auth0User);
  });
}

既然这两个方法是异步的,当然是不能正常工作的。调用不是按顺序执行的。我想链接 promise ,以便 create 在 createUser 返回调用之前不会运行。尝试使用绑定(bind),但它对我不起作用。应该如何进行顺序链接?我在 createUser 的 .then 上绑定(bind)?请指教。

最佳答案

当您从 then 返回一个 promise 时,链接在其后的 then 将解决/拒绝该 promise 而不是原始 promise。

createUser(api, auth0User).then(function(auth0Info) {
  cursorUser.authProfile = auth0Info;

  // Return create's promise
  return create(accountsAPIService, cursorUser);

}, function (err) {
  console.log('could not create auth0 user, error: ', err, '\nfor: ', auth0User);
})
// This will wait for create's promise instead of createUser's promise
.then(function (account) {
  console.log("created account:", account);
}, function (err) {
  console.log('count not create account for user, error: ', err, '\nfor: ', auth0User);
})

关于javascript - 正确链接 Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34592746/

相关文章:

javascript - 水平滚动崩溃

java - 将文件从 Javascript 传递到 Java Uploader Applet

javascript - 如何将现有的回调 API 转换为 promise ?

angularjs - Ionic 3 - 异步 Http 调用和 Ionic 加载问题

javascript - AJAX-PHP 如果验证失败则留在同一页面

javascript - 如何使用 JavaScript 从父级元素的 ID 获取元素的属性?

javascript - 简单的字符串拆分返回对象而不是数组

javascript - 发送视频和音频流到服务器

javascript - 离线 DynamoDB + Serverless + Lambda ResourceNotFoundException

javascript - 我可以解开 'when' Promise 调用的嵌套吗?