Как передать параметр функции обещания
это может показаться глупым вопросом, но я новичок в этой теме. Я работаю над 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"));
}
});
Ответы
Ответ 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');