위 챗 애플 릿 의 onLaunch 와 onload 비동기 문제 에 대한 상세 한 설명
전단 시간 에 위 챗 애플 릿 몰 프로젝트 를 개 발 했 습 니 다.이 프로젝트 는 애플 릿 에 들 어가 면 wx.login({})이라는 api 를 통 해 사용자 로그 인 을 하고 시스템 배경 에 있 는 사용자 기본 정 보 를 얻 는 것 이 필요 합 니 다.그 전에 위 챗 애플 릿 의 App.js 에서 onLaunch(애플 릿 초기 화 완료)방법 이 다른 페이지 의 onload 방법 보다 먼저 실 행 될 것 이 라 고 생각 했 습 니 다.그러면 문제 가 생 겼 습 니 다.저 는 애플 릿 홈 페이지 에 들 어 갈 때마다 가끔 onlaunch 방법 을 먼저 실행 하고 가끔 은 첫 페이지 의 onload 방법 을 먼저 실행 합 니 다.마지막 으로 확정 을 거 쳤 습 니 다.위 챗 애플 릿 에서 이 두 가지 방법 은 선후 순 서 를 집행 하지 않 았 습 니 다.왜냐하면 그들 은 모두 비동기 로 실 행 했 기 때 문 입 니 다.물론 위 챗 애플 릿 을 개발 한 개발 자 들 은 위 챗 요청 데이터 가 모두 비동기 적 으로 실 행 된 것 을 알 고 있 습 니 다.예 를 들 어 같은 onload 에서 두 개의 요청 데 이 터 를 쓰 는 방법 은 반드시 선착순 으로 실 행 될 수 있 는 것 이 아 닙 니 다.이것 이 바로 전설의 비동기 지옥 입 니 다.
해결 방법:
물론 이 실행 순 서 는 위 챗 애플 릿 의 비동기 실행 요청 으로 인 한 것 임 을 알 았 다.우 리 는 Promise 를 사용 하여 비동기 프로 그래 밍 문 제 를 해결 할 수 있다.제 해결 방법 은 우선 app.js 에서 전체 방법 을 정 의 했 습 니 다.애플 릿 에 로그 인하 여 사용자 정 보 를 요청 하 는 인터페이스 입 니 다.첫 페이지 에 들 어 갈 때마다 제 가 사용자 정보 캐 시 를 가지 고 있 는 지 여 부 를 판단 합 니 다.존재 하지 않 는 다 면 app.js 의 전체 방법 으로 데 이 터 를 가 져 오 라 고 요청 합 니 다.여기 서 저 는 Promise 의 기본 적 인 용법 을 상세 하 게 소개 하지 않 겠 습 니 다.완 일 봉 은 이미 매우 상세 하기 때문에 여러분 은 클릭 하여[http://es6.ruanyifeng.com/#docs/promise#Promise-all]을 볼 수 있 습 니 다.
방법 구현:
App.js 방법 구현:
App({
onLaunch: function() {
console.log('App Launch')
//
},
/**
*
*/
globalData: {
openid: '', // openid
userId: '', //
},
/**
* ( onlaunch onload )
*/
userLogin: function() {
var that = this;
// promise
return new Promise(function(resolve, reject) {
//
wx.login({
success: function(res) {
if (res.code) {
console.log(" code :" + res.code);
// wx.request code openid,
wx.request({
url: 'https://www.xxxx.xxx.api', // 【 , https 】
data: {
code: res.code //code
},
header: {
'content-type': 'application/json' //
},
success(res) {
console.log(res.data)
if (res.data.errcode == 0) {
//
that.globalData.openid = res.data.openid;
that.globalData.userId = res.data.UserId;
// session
wx.setStorageSync("userId", that.globalData.userId)
console.log(that.globalData.userId);
console.log(that.globalData.openid);
//promise
resolve(res.data);
} else {
reject('error');
}
},
fail: function(res) {
reject(res);
wx.showToast({
title: ' '
})
},
complete: () => {
} //complete ,
})
}
else
{
reject("error");
}
}
})
})
}
});
index.js 구현:
const app=getApp();// app.js
page({
onLoad: function (option) {
var that = this;
let UserId = wx.getStorageSync("userId");
console.log(" :" + UserId);
if (UserId == '') {
app.userLogin().then(res => {
console.log("promise :");
console.log(res);
if (res.errcode == 0) {
//
that.GetData();
}
})
}
else
{
//
that.GetData();
}
}
,
GetData()
{
//
}
})
요약:물론 비동기 반전 을 해결 하 는 방법 은 여러 가지 가 있 지만 저 는 여기 서 좋 은 것 만 말 하고 여러분 들 이 어떤 생각 이 있 으 면 같이 공부 할 수 있 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
애플 릿 이미지 새로 고침, nginx 재 작성 url 제거 인자이전에 nginx 로 이미지 서버 를 만 들 었 는데 전단 에 작은 프로그램 을 사 용 했 습 니 다. 작은 프로그램 이 출시 된 후에 그림 이 새로 고침 되 지 않 는 것 을 발 견 했 습 니 다. 조사 한 결과 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.