【发布时间】:2020-11-22 12:13:57
【问题描述】:
我正在努力让 javascript Promises 正常工作。
我正在寻找关于我做错了什么的一两个指针。下面是我的代码。我正在尝试将loadUserPayRateWrapped() 转换为从数据库获取数据的函数。
我得到的行为是,在$.getJSON() 有机会获取它的数据之前,整套包装器代码仍在返回。
等待数据请求的函数:
function loadUserPayRateWrapped( projectId )
{
var URI = "/projects/getAssignedResponsibilities?projectId=" + projectId;
$.getJSON( URI, function ( data )
{
if ( data === null )
return getDataFromCookie( "payRate" );
else
{
const employeeId = getDataFromCookie( "empId" );
if ( data[ 0 ].alternatePay === null )
return getDataFromCookie( "payRate" );
var altPayArray = JSON.parse( data[ 0 ].alternatePay );
$.each( altPayArray, function ( idx, element )
{
if ( element.uid == employeeId )
return element.pay;
} );
}
// nothing was found, so return the regular pay rate
return getDataFromCookie( "payRate" );
});
}
包装承诺函数:
function loadUserPayRatePromise( projectId )
{
var payRateProm = new Promise((resolve, reject) =>
{
var payRate = loadUserPayRateWrapped( projectId );
resolve( payRate );
});
payRateProm.then( result => { return payRate } );
}
异步调用者:
async function loadUserPayRate( projectId )
{
try
{
const pay = await loadUserPayRatePromise( projectId );
return pay;
}
catch(error)
{
}
}
需要数据的主线代码:
// add the default pay rate for this user
var payRate = loadUserPayRate( data.projectId );
$( "#hourlyRate" ).val( payRate.toFixed(2) ); //payRate must be populated before this line
【问题讨论】:
标签: javascript promise es6-promise