在number1完成之前先运行.then()number2。 附言getConnectIn()是承诺
function query(sql){
var data = [555,555];
getConnectIn()
.then((check_connect)=>{ //then 1
if(check_connect){
connector.query(sql,function(err,result,fields){
data = result;
});
setTimeout(()=>{console.log("data before>",data);},1000);
}
})
.then(()=>{ //then 2
console.log("data after>",data);
})
.catch((err)=>{console.log("error >",err)})
}
答案 0 :(得分:1)
您以错误的方式使用df1 = (df.assign(animal = df['animal'].where(df['animal'] == 'cat'),
height = df['height'].where(df['height'] > 10),
from1 = df['from'].where(df['from'] == 'breeder')
)
.groupby(['Person']).agg(
number_of_animal = pd.NamedAgg(column = 'animal', aggfunc = 'count'),
number_of_from = pd.NamedAgg(column = 'from1', aggfunc = 'count'),
total_height = pd.NamedAgg(column = 'height', aggfunc = 'sum'),
total_weight = pd.NamedAgg(column = 'weight', aggfunc = 'sum')
))
print (df1)
number_of_animal number_of_from total_height total_weight
Person
John 2 1 0.0 17.8
Paul 0 1 34.0 205.5
Taylor 0 0 55.0 200.0
。在第一个then
处理程序方法中,您什么都不返回,这就是为什么JS引擎将继续在链中的下一个then
上运行的原因。将您的代码更新为:
then
看看MDN page,以了解有关承诺链的更多信息。
答案 1 :(得分:0)
基本上1,然后先调用,但再次调用异步方法(connector.query),这需要时间并控制传递给下一个调用,然后setTimeout将执行过程传递给next,或者在调用setTimeout时返回新的Promise,或者在您的调用之后使用第二个像这样的async connector.query()方法。这里你也不需要超时
function query(sql){
var data = [555,555];
getConnectIn()
.then((check_connect)=>{ //then 1
if(check_connect){
connector.query(sql,function(err,result,fields){
// data = result;
}).then((rslt)=>{ //then 2
console.log("data after>",rslt);
})
.catch((err)=>{console.log("error >",err)}
}
});
}