小编mde*_*erk的帖子

对未使用延迟[反]模式而尚未创建的承诺的承诺

问题1:在给定时间只允许一个API请求,因此真实的网络请求排队,而尚未完成的请求.应用程序可以随时调用API级别并期望获得回报.当API调用排队时,将在未来的某个时刻创建网络请求的承诺 - 返回应用程序的内容是什么?这就是如何通过延迟的"代理"承诺来解决它:

var queue = [];
function callAPI (params) {
  if (API_available) {
    API_available = false;
    return doRealNetRequest(params).then(function(data){
      API_available = true;
      continueRequests();
      return data;
    });
  } else {
    var deferred = Promise.defer();
    function makeRequest() {
      API_available = false;
      doRealNetRequest(params).then(function(data) {
        deferred.resolve(data);
        API_available = true;
        continueRequests();
      }, deferred.reject);
    }
    queue.push(makeRequest);
    return deferred.promise;
  }
}

function continueRequests() {
  if (queue.length) {
    var makeRequest = queue.shift();
    makeRequest();
  }
}
Run Code Online (Sandbox Code Playgroud)

问题2:某些API调用被去抖动,因此要发送的数据会随着时间的推移而累积,然后在达到超时时批量发送.调用API的应用程序期待作为回报的承诺.

var queue = null;
var timeout = 0;
function callAPI2(data) {
  if …
Run Code Online (Sandbox Code Playgroud)

javascript promise deferred

7
推荐指数
1
解决办法
780
查看次数

从NSNumber获得CGFloat最常见和最正确的做法是什么?

我的工作代码是这样的:

NSNumber *n = @42.42;
CGFloat cgf = 0; 
CFNumberRef cfn = CFBridgingRetain(n);
CFNumberGetValue(cfn, kCFNumberCGFloatType, &cgf);
CFRelease(cfn);
Run Code Online (Sandbox Code Playgroud)

也可能

CGFloat cgf = (CGFLOAT_IS_DOUBLE) ? [n doubleValue] : [n floatValue];
Run Code Online (Sandbox Code Playgroud)

但这对我来说更加丑陋.

在我看来应该有更好的API来做这样一个普通的事情.有吗?

cocoa-touch objective-c ios

5
推荐指数
1
解决办法
2930
查看次数

标签 统计

cocoa-touch ×1

deferred ×1

ios ×1

javascript ×1

objective-c ×1

promise ×1