Подтвердить что ты не робот

Как передать параметр функции обещания

это может показаться глупым вопросом, но я новичок в этой теме. Я работаю над promises на node js. И я хочу передать параметр функции обещания. Однако я не мог понять.

someModule.someFunction.then(username, password,function(uid) {
  /*stuff */
}

и функция - это что-то вроде

var someFunction = new Promise(username, password, function(resolve, reject) {
  /*stuff using username, password*/
  if ( /* everything turned out fine */ ) {
    resolve("Stuff worked!");
  } else {
    reject(Error("It broke"));
  }
});
4b9b3361

Ответ 1

Оберните ваше обещание внутри функции, или оно сразу же начнет выполнять свою работу. Кроме того, вы можете передать параметры в функцию:

var someFunction = function(username, password) {
  return new Promise(function(resolve, reject) {
    /*stuff using username, password*/
    if ( /* everything turned out fine */ ) {
      resolve("Stuff worked!");
    } else {
      reject(Error("It broke"));
    }
  });
}

Затем используйте его:

someModule.someFunction(username, password).then(function(uid) {
  /* stuff */
})

ES6:

const someFunction = (username, password) => {
  return new Promise((resolve, reject) => {
    /*stuff using username, password*/

    if ( /* everything turned out fine */ ) {
      resolve("Stuff worked!");
    } else {
      reject(Error("It broke"));
    }
  });
};

Использование:

someModule.someFunction(username, password).then(uid => {
  /* stuff */
});

Ответ 2

Другой способ (обязательно попробуйте):

var promise1 = new Promise(function(resolve, reject) {
  resolve('Success!');
});
var extraData = 'ImExtraData';
promise1.then(function(value) {
  console.log(value, extraData);
  // expected output: "Success!" "ImExtraData"
}, extraData);

Ответ 3

Вы можете использовать .bind(), чтобы передать параметр (this) в функцию.

var someFunction =function(resolve, reject) {
  /* get username, password*/
  var username=this.username;
  var password=this.password;
  if ( /* everything turned out fine */ ) {
    resolve("Stuff worked!");
  } else {
    reject(Error("It broke"));
  }
}
var promise=new Promise(someFunction.bind({username:"your username",password:"your password"}));

Ответ 4

Я работал с обратными вызовами, мне нужно было CTA для события click, чтобы вызвать функцию и определить, какой тип обратного вызова был запущен, вот несколько простых примеров.

let fn = function () { alert('A simple function') };

let cta = fn();

console.log(cta instanceof Promise);

// logs false

Новый пример обещания

let fn = function () {

    return new Promise(function (accept, reject) {

        accept();

        // reject();

    });

};

let cta = fn();

if(cta instanceof Promise) {

    cta.then(function () {

        alert('I was a promise');

    });

}

Axios Пример 1

let fn = function () {

   return axios.get('/user');

}

let cta = fn();

if(cta instanceof Promise) {

    cta.then(function () {

        alert('I was a promise from axios');

    });

}

// Triggers alert('I was a promise from axios');

Axios Пример 2

let fn = function () {

   return axios.get('/user').then(response => {
       console.log('user response', response.data);
   });

}

let cta = fn();

if(cta instanceof Promise) {

    cta.finally(function () {

        alert('I was a final promise from axios');

    });

}

// Triggers alert('I was a final promise from axios');