#javascript #promise #app.js
#javascript #обещание #app.js
Вопрос:
Пожалуйста, помогите Я хочу использовать результат функции 1 (Fn1) в функции 2 (Fn2).
App={
st: null,//st is number value
Fn1: function() {
App.contracts.contractName.deployed().then(function(instance){
return instance.getST();
}).then(function(result){
App.st = resu<
});
},
Fn2: function() {
alert(App.st)//
}
}
Ответ №1:
Вам нужно позвонить Fn1
раньше Fn2
, чтобы получить доступ к его значению, так что давайте перейдем Fn1
к обещанию:
App = {
st: null,//st is number value
Fn1: function() {
return new Promise((resolve, reject) => {
App.contracts.contractName.deployed().then(function(instance){
return instance.getST();
}).then(function(result){
App.st = resu<
resolve();
}).catch(function(err){
reject(err);
})
})
},
Fn2: function() {
alert(App.st)
}
}
или лучше с помощью async / await:
App = {
st: null,//st is number value
Fn1: async function() {
try {
const instance = await App.contracts.contractName.deployed();
const result = await instance.getST();
App.st = resu<
} catch(err) {
throw err;
}
},
Fn2: function() {
alert(App.st)
}
}
Теперь вы можете подождать до Fn1
exec перед вызовом Fn2
:
App.Fn1().then(function() {
App.Fn2()
})
или с помощью async / await:
await App.Fn1()
App.Fn2()
Комментарии:
1.Предупреждение: Это анти-шаблон вложенного обещания.
App.contracts.contractName.deployed()
уже возвращает обещание — нет смысла создавать еще одно.2. @Quentin вот почему я предлагаю OP использовать async / await , где это возможно, вместо старомодного связывания / вложения обещаний
3. @Xeelley спасибо, оба метода работают.